ページ 1 / 1
PHPのセッションについて
Posted: 2012年7月26日(木) 17:42
by エクレ
セッションデータの寿命についてなんですが、
色々ググって見ると、
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
ini_set('session.gc_maxlifetime', 2 * 60 * 60);
ってすれば、きっちり2時間で破棄されるようなのですが、
破棄される前にまたアクセスがあった場合、
そのアクセスからまた2時間後に破棄されるように設定したいんですが、
その場合はまた上記の設定を行えばそのアクセスから2時間セッションデータが有効になっていると思っていいのでしょうか?
セッションデータの有効期限の確認方法も教えてください。
また、ブラウザのクッキーにもPHPSESSIDのセッションIDが書き込まれているわけですが、
こちらの寿命もまた延長する必要があるのでしょうか?
その場合はsetcookieを使えばいいのでしょうか?
よろしくお願い致します。
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 18:27
by エクレ
追加で質問です。
PHPではサーバに保存されてるセッションデータはガベージコレクタによって削除されるということがわかりました。
そのタイミングはセッションの開始時であるということも。
この削除の流れというのは、
ユーザがサイトにアクセス
↓
ブラウザのPHPSESSIDのCOOKIEをチェック
↓
そのCOOKIEがあれば、
サーバにある該当のセッションデータの有効期限を調べる
↓
有効期限が切れてたらサーバのセッションデータ削除
という流れで合ってますでしょうか?
この流れで行けば問題なくセッションデータは削除されると思うのですが、
もしPHPSESSIDのクッキーを削除していた場合、サーバにあるセッションデータはどのタイミングで削除されるのでしょうか?
実際にPHPSESSIDのクッキーを削除してアクセスしてみると、
新しいセッションIDが割り振られ、古いセッションデータは有効期限を過ぎても残ったままでした。
このような場合はcronとかでチェックして、古いセッションデータを削除するしか方法はないのでしょうか?
よろしくお願い致します。
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 18:32
by softya(ソフト屋)
セッションの残骸がいつ掃除されるかについては私も存じませんが、気にするほど容量を圧迫するものではないと思います。
寿命が切れてセッションとして機能しなければ問題は無いのではないでしょうか?
【補足】PHPのバージョンによってガベージコレクタの動作も変わっているはずです。
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 18:51
by エクレ
softyaさん、ありがとうございます。
確かに容量はそんなに食いませんので、もし無理なら放置しようと思ってます。
でも正直PHPのセッションをよく理解してないので、ただしい有効期限の設定とセッションデータの削除について、
理解しておきたいんです。
PHPのバージョンは5.2で考えています。
もし私の質問が分かりにくかったら、
「セッションデータの有効期限を1週間に設定。
一週間の間に再度アクセスがあれば有効期限をその日からまた一週間後に設定し、
一週間の間にまったくアクセスがなければセッションデータとセッションIDが書き込まれたCookie(PHPSESSID)を削除する。
ただしユーザ側でCookie(PHPSESSID)を手動で削除した場合も、サーバ側のセッションデータが削除されるようにする。
」
というコードを提示してください。
私がわかるコードは以下のコードだけです。
コード:
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1);
ini_set('session_gc_maxlifetime',3600*24*7);
session_set_cookie_params(3600*24*7);
でも正直、session_set_cookie_paramsでクッキーの寿命を設定するのと、
setcookieを使ってPHPSESSIDの有効期限を設定するのと何が違うのかよくわかっていません。
また上記のコードでも一週間以上経ってからアクセスする時には既にCookieは消えているため、
サーバ側のセッションデータは残ったままになってしまうはずです。
これは私のコードがおかしいのか、それともこれは仕方のないことで、
一般的にはcronとかで残ったセッションデータを削除して対応しているのか等、ご教授いただければと思います。
よろしくお願い致します。
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 19:06
by softya(ソフト屋)
エクレ さんが書きました:
でも正直、session_set_cookie_paramsでクッキーの寿命を設定するのと、
setcookieを使ってPHPSESSIDの有効期限を設定するのと何が違うのかよくわかっていません。
また上記のコードでも一週間以上経ってからアクセスする時には既にCookieは消えているため、
サーバ側のセッションデータは残ったままになってしまうはずです。
これは私のコードがおかしいのか、それともこれは仕方のないことで、
一般的にはcronとかで残ったセッションデータを削除して対応しているのか等、ご教授いただければと思います。
よろしくお願い致します。
セッション上の情報はログイン関係など重要な情報なので1週間維持するのは間違いです。
ちゃんと保存するならデータベースが望ましいわけで、セッションとは使い分けて下さい。
クッキーの情報は1週間維持して貰って構いません。
クッキーが消えて残るセッションですが何時消えるか私も分かりません。
cronで消すのを推奨しているなど聞いたこともないのでシステムと喧嘩するような行為は避けたほうが良いでしょう。
ガベージコレクションに関しては、こちらが参考になると思います。
「PHPプロ!TIPS+」
http://www.phppro.jp/phptips/archives/vol41/2
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 19:11
by エクレ
softya(ソフト屋) さんが書きました:
セッション上の情報はログイン関係など重要な情報なので1週間維持するのは間違いです。
ちゃんと保存するならデータベースが望ましいわけで、セッションとは使い分けて下さい。
クッキーの情報は1週間維持して貰って構いません。
マジですかΣ(○д○ノ)ノ
ちょっとリンク先の内容等確認して考え直してみます。
まだ解決にはしませんが、とりあえずありがとうございます。
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 20:36
by softya(ソフト屋)
エクレ さんが書きました:softya(ソフト屋) さんが書きました:
セッション上の情報はログイン関係など重要な情報なので1週間維持するのは間違いです。
ちゃんと保存するならデータベースが望ましいわけで、セッションとは使い分けて下さい。
クッキーの情報は1週間維持して貰って構いません。
マジですかΣ(○д○ノ)ノ
ちょっとリンク先の内容等確認して考え直してみます。
まだ解決にはしませんが、とりあえずありがとうございます。
同じセッションIDを長時間維持する危険性については下記を参考にしてください。
「HTTP cookie セッションハイジャック - Wikipedia」
http://ja.wikipedia.org/wiki/HTTP_cooki ... 3.E3.82.AF
「@IT:Webアプリケーションに潜むセキュリティホール(3)」
http://www.atmarkit.co.jp/fsecurity/ren ... ole01.html
「PHPを使った開発におけるセッションハイジャック対策について - みんなの動画サーチ開発者ブログ」
http://moviesearch1.blog15.fc2.com/blog-entry-43.html
Re: PHPのセッションについて
Posted: 2012年7月26日(木) 21:43
by エクレ
softyaさん、ありがとうございます。
「PHPプロ!TIPS+」
http://www.phppro.jp/phptips/archives/vol41/2
を見る限りちゃんとガベージコレクションされていますよねぇ。
でini_setした設定がちゃんと反映されているか調べててみたら、
反映されていませんでした・・・・
どうやら使ってるレンタルサーバではini_setで設定しても反映しない仕様だったようです。。。
1日無駄にした・・・
ありがとうございました(T-T)