« 牛が戻ってくる | メイン | Lesser Hiryu捕りました »
2004年11月02日
SESSIONとcache
PHPでセッションを利用すると、デフォルトの設定では、ブラウザのキャッシュが無効になります。
どういうことかというと、例えば、「入力フォーム→確認→送信」という流れのプログラムがあり、データの受け渡しにセッションを使うためにそれぞれのページで
<?php
session_start();
?>
という記述をすると、「確認」の後にブラウザの[戻る]ボタンで戻ろうとしても、「有効期限切れ」が出て「入力フォーム」を表示できなくなります。
これを回避するためには以下のように記述します。
<?php
session_cache_limiter('private_no_expire');
session_start();
?>
php.iniの記述を変更しても同様です。
参考:PHPマニュアル セッション処理関数(session)
ただし、なぜデフォルトでsession_cache_limiterが'nocache'となっているかを考えると、セッションで受け渡すようなデータ(極端な例ではクレジットカード番号とか)がやたらとキャッシュされるとセキュリティ面で問題となるからであり、もし'private_no_expire'や'private'として使うのなら、そのあたりの配慮も必要かと思います。
それと、最近気が付いたことですが、php.iniのsession.gc_maxlifetimeはデフォルトでは「1440」になっています。
session.gc_maxlifetimeは、簡単に言うと、セッションの有効期限(そのセッションが最後に利用されてからの秒数)であり、その値が1440秒、つまり24分なのですね。
ほとんどは問題ないとは思いますが、例えば、入力フォームなんかで、仕事しながら入力して、しばらくしてまた書き始めるみたいな場合は、セッションの期限切れになって送信できなくなる、ということもあり得るのです。
このあたりの対策もしておく必要があります。
いえ、最近わたしの作ったPHPプログラムで実際に体験したので。
投稿者 Utayume : 2004年11月02日 18:51| 05 Work(Perl, PHP, etc)
AD
トラックバック
このエントリーのトラックバックURL:
http://ondes-martenot.info/MT/mt-tb.cgi/239