- 2009-04-13 (月) 8:56
- サーバ管理
自習室は基本全ページPHPなのですが、最初の頃にひっかかったのが「Firefoxだけスクロール位置が記憶されない」現象でした。マニュアルなどの長めのページを見ている途中で別のページに移動し、その後「戻る」ボタンで戻ると、IEやChromeでは最後に見ていたときのスクロール位置が維持されるのに、Firefoxだけページ先頭に戻ってしまうのです。
色々調べた結果、セッション(複数ページに渡る処理を行うために一時的にサーバサイドにデータを記憶させるしくみ)を使っているとFirefoxではページがキャッシュされずに毎回リロードされ、その結果スクロール位置も初期化されてしまうということがわかりました。
そこでsession_startの前に「session_cache_limiter(’private’)」と書いて、セッション中でもページがキャッシュされるようにしました。これでFirefoxでもスクロール位置が記憶されるようになります。
<?php
session_cache_limiter('private');
session_start();
?>
ところが、最近自習室のログインシステムを変更していて気づいたのですが、この記述だとIEではキャッシュされすぎてしまうのです。たとえば、ログインした後でトップページに移動しても、キャッシュされたログアウト状態のページが表示されてしまいます。
仕方がないので、PHP側でブラウザ情報(ユーザーエージェント)を調べ、Firefoxのときだけ「session_cache_limiter(’private’)」するようにしました。
<?php
//FireFoxのみ処理を変える
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent, "Firefox") !== false){
session_cache_limiter('private');
}
session_start();
?>
これが最善の方法かはわかりませんが、とりあえず問題は解決したようです。
CSSやJavaScriptなどのクライアントサイドほどではないにしても、サーバサイドプログラムでもブラウザ個別対応が必要になることもあるのですね。
ところで上の話とは関係ないのですが、自習室のブログ一覧が自動更新されるようになりました。ご存じのように自習室はWordpress Muのブログシステムを使用しているのですが、ブログ一覧はこちらで作成したページなので連動しておらず、これまで手作業で更新していたのです。
今回Wordpress Muが使用しているデータベースを調べてみたところ、ブログIDの一覧が「blog_id」テーブルに、ブログ名が「wp_(ブログID)_options」テーブルに登録されていることがわかったので、それを調べて表示するPHPを書きました。
さらにブログを新規追加する方法も見つかれば、登録作業を完全自動化できてなお良いのですが……。もともと短期間でゲームアップローダを用意するために導入したものなので、いずれは脱Wordpressしたいと考えております。
- Newer: [PHP]アップローダと文字化け
- Older: [ActionScript]Flashの不思議な軽さ
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://i-libro.net/wpmu/blog/archives/357/trackback
- Listed below are links to weblogs that reference
- [PHP]Firefoxのブラウザキャッシュ from わくわくプログラミング自習室 Blogs
