試行錯誤して、今の形に落ち着いた。
最初は、まずログインフォームがあって、パスワードを入れてsubmitしたら、記事の投稿とキャッシュ更新のできる管理メニューフォームが表示されて、「キャッシュ更新」ボタンを押すとキャッシュ更新するような仕様で作りかけたが挫折。
ログインフォームで入力されたパスワードを管理メニューのフォームにPOSTするまでは良いが、そこからさらにキャッシュ更新ボタンが押されたときに、キャッシュ更新フォームにパスワードをPOSTするには、どうしても管理メニューのフォームのinputタグのvalueに値をセットしてやらないといけないので、htmlソースを表示されるとパスワードが丸見えになって非常に間抜けな結果になるので、この方式は断念。今のような形にすれば、入力されたパスワードはPOST一回しかされないので、たとえソースを見られてもパスワードは見えない。
…と、なぜかさっき(午前零時回ったあたり)から、ブラウザで更新ボタンを押すたびにカウンターがアップしていってしまう…。なぜだろ…。(^^;
原因判明。FireFoxで更新ボタンを押したときに、リファラだけ送信されずユーザエージェントは送信される、という状態になることがあるためらしい。(たとえば、カウンタの設置されたページを表示して、そのタブで記事投稿ページに飛び、「←」(戻る)ボタンでカウンタの設置されたページに戻ると、以降更新ボタンを何度押してもリファラだけが送信されない状態になる。他のブラウザでもそうなるのかは未確認。
とりあえず:
if((!$_SERVER['HTTP_REFERER'])&&(!$_SERVER["HTTP_USER_AGENT"])) $bCount = false;
を
if((!$_SERVER['HTTP_REFERER'])||(!$_SERVER["HTTP_USER_AGENT"])) $bCount = false;
と変更してみた。オリジナルはなぜ論理積なのだろう。これで問題ないのか知らん。(^^;
追記:論理和にするとカウントが増えないようなので元に戻した。リファラかユーザエージェントが送信されないケースが大半なのかも知れない。…とすると、やはり直近アクセスのIPアドレスを保存しておいて同じならカウントしない…というような処理が必要になる気がする。
追記2:カウンタ修正。counter.logに、リモートアドレス、GMTタイムスタンプの2フィールドを追加して、「(counter.logに記録されてるのと同じリモートアドレス)かつ(counter.logに記録された時刻から1時間以内)」の条件のときは、カウントアップしないようにしてみた。今のところうまくカウントできているようだ。