
いつも、お世話になっております。(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()」を格納し、
その時間をもとに、ログイン期限を設定し、
ログイン時からの経過時間と、その期限とを比較して、
ログイン状態を継続(延長更新?)させるか、切断するかを毎回判断させる、
なんていう方法もありそうですが、
その場合にしても、
結局は、サーバ側のセッションファイルの有効期限の持ちが悪ければ、
同様に、うまくいかないはずだと私は考えています。
No.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 が起動してセッションファイルを消している」
ということは考えにくいのかなぁ…
と思いましたが、いかがでしょうか。
どこに問題があるのかさっぱりわからなくて困ってしまいます…。
なお、サイトへのアクセスを数分間隔で行っている場合には、
既に書きました通り、セッションが切れないことが確認できました。
どこをどう確認したら問題点が見つかるのか、
それすらよく分からない状況です。
また何か思い当たること等がありましたら、
是非アドバイスをお願いいたします。
アドバイスをどうもありがとうございます。
>他のスクリプトの GC が起動して
仰る通り、この点が怪しいなと感じました。
サイトのファイルを総点検し、
後日、その結果を「補足欄」にてお知らせしたいと思います。
この度は貴重なアドバイスをどうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Sessionの上限について
-
別ブラウザ間でセッションの値...
-
セッションのスコープ(有効範...
-
セッションの破棄
-
「取得先」という表現について
-
バッチファイルでpingの結果を...
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
Excel VBA:特定の文字列以降(...
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
DTOとEntityの差は何ですか。
-
syntax error, unexpected 'ech...
-
findstrのerrorlevel
-
閉じるボタン「×」を制御したい
-
VBAでPDFファイルの文書のプロ...
-
ActiveReportのサブレポート機...
-
クリップボード画像転送方法
-
VBA コレクションに2次元配列...
-
PHPで値を保持する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLのパラメータをGETのままで...
-
ログインしたら他からログイン...
-
Sessionの上限について
-
別ブラウザ間でセッションの値...
-
ブラウザを閉じた後もセッショ...
-
PHP SESSION変数を複数使用でき...
-
ログイン画面をはさんだ後、自...
-
PHPのプロセス滞留について
-
セッションのスコープ(有効範...
-
セッションファイルの有効期限...
-
セッション変数にパスワードを...
-
完全なセッション破棄をしたい
-
SESSIONの削除について
-
PHPのセッション有効期限について
-
共有SSLでのセッションの引継ぎ
-
PHP cookieの値が更新されない...
-
携帯電話対応のカートって??
-
セッションを維持したまま、サ...
-
PHPSESSIDの表示
-
ログイン 作成
おすすめ情報