dポイントプレゼントキャンペーン実施中!

いつも、お世話になっております。(PHP5.2.5)

セッションの有効期限の設定方法について色々調べましたが、
解決できなかったため、質問いたします。

---
例えば、
a.phpと、b.php、2つのスクリプトファイルからなるサイトにおいて、

a.php、b.phpどちらにおいても、スクリプトソース冒頭で、

//(1)サーバ側のセッションファイルの有効期限を(少なくとも)24時間に設定
//有効期限が過ぎた後は、ある一定の確率でGCが起動しファイルを削除
ini_set('session.gc_maxlifetime', 86400);

//(2)クライアント側のクッキーファイルの有効期限を24時間に設定
session_set_cookie_params(86400,"/");

//(3)セッションIDを生成、付与
session_start();

とし、

さらに、その上で、
IDとパスワードの入力に成功した場合に、
ログインさせ、その状態をセッション値に入れます

$_SESSION['login'] = 'login';

---

以上の経路をたどった場合の「ログイン持続期間」は、
24時間となると私は考えていますが、違いますでしょうか?
しかし、実際には、1時間も持ちません。
(ちょくちょくサイトにアクセスしていると、1時間以上持つようなのですが。
※つまり、期限が更新(延長)されているんでしょうかね。)

で、どうして意図した通りに動かないのかを調べようと、
firefoxにて、クッキーの有効期限を確認すると、
(2)の処理がうまくいっているせいか、
こちらの有効期限は意図通りに設定されています。

よって、意図通りに機能しない原因は、
サーバ側のセッションファイルの有効期限が
うまく設定されていないからなのでは、と思っています。

つまり、(1)の処理がうまく出来ていないことが予想されます。

はてさて、どこに問題があるのか…。

また、このサイトの例において、
もし仮に私の意図した通りの設計となった場合には、
アクセスの度に、その有効期限を24時間延長するような処理になるのでしょうか?

以上、どなたかどうかアドバイスを宜しくお願い致します。

---
なお、
セッション値に「time()」を格納し、
その時間をもとに、ログイン期限を設定し、
ログイン時からの経過時間と、その期限とを比較して、
ログイン状態を継続(延長更新?)させるか、切断するかを毎回判断させる、
なんていう方法もありそうですが、
その場合にしても、
結局は、サーバ側のセッションファイルの有効期限の持ちが悪ければ、
同様に、うまくいかないはずだと私は考えています。

A 回答 (1件)

他のスクリプトの GC が起動してセッションファイルを消しているとか?



> 注意: 異なる値を session.gc_maxlifetime に指定している 別々のスクリプトがセッションデータの保存場所を共有している場合、
> 一番小さい設定値に達した時点でデータが消去されます。このような場合には、 お互いに session.save_path を使用します。
http://jp2.php.net/manual/ja/session.configurati …

この回答への補足

(お礼→補足 の順に記載)
早速ですが、前述の総点検をしてきました。
で、結果ですが、
全てのファイルにて、require_onceを使って設定ファイルを読み込んでおり、
その設定ファイルの中で、

ini_set('session.gc_maxlifetime', 86400);
session_set_cookie_params(86400,"/");  //86400==1day
session_start();

と、しているので、
「他のスクリプトの GC が起動してセッションファイルを消している」
ということは考えにくいのかなぁ…
と思いましたが、いかがでしょうか。

どこに問題があるのかさっぱりわからなくて困ってしまいます…。
なお、サイトへのアクセスを数分間隔で行っている場合には、
既に書きました通り、セッションが切れないことが確認できました。

どこをどう確認したら問題点が見つかるのか、
それすらよく分からない状況です。

また何か思い当たること等がありましたら、
是非アドバイスをお願いいたします。

補足日時:2009/10/14 23:56
    • good
    • 0
この回答へのお礼

アドバイスをどうもありがとうございます。

>他のスクリプトの GC が起動して

仰る通り、この点が怪しいなと感じました。
サイトのファイルを総点検し、
後日、その結果を「補足欄」にてお知らせしたいと思います。

この度は貴重なアドバイスをどうもありがとうございました。

お礼日時:2009/10/14 23:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!