まず、次のようにセッションの有効期間を手動で設定しましょう:
<?php session_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?>
実際、Session には、セッションの有効期間を設定するための関数 session_set_cookie_params(); も用意されています。セッションの有効期間。この関数は session_start() 関数が呼び出される前に呼び出される必要があります:
<?php // 保存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_SESSION["admin"] = true; ?>
クライアントが IE 6.0 を使用している場合、session_set_cookie_params(); 関数の設定にいくつかの問題が発生します。 Cookie なので、引き続き setcookie 関数を手動で呼び出して Cookie を作成します。
php でのセッション有効期限の設定
インターネット上の多くの人が、php 設定ファイルの session.gc_maxlifetime を変更するという答えを出しました。セッションのリサイクル メカニズムについて詳しく知りたい場合は、読み続けてください。 (この記事の環境はphp5.2です)
概要: すべてのPHPリクエストは1/100の確率(デフォルト値)で「セッションのリサイクル」をトリガーします。 「セッションのリサイクル」が発生すると、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超える場合、ファイルは削除されます。これは、これらのセッションが期限切れになったことを意味します。
1. セッションはサーバー側 (通常は PHP モジュールを備えた Apache) にどのように存在しますか?
デフォルトでは、PHP はセッションを /tmp ディレクトリに保存し、ファイル名は sess_01aab840166fd1dc253e3b4a3f0b8381 のようになります。各ファイルはセッションに対応します。
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 username|s:9:”jiangfeng”;admin|s:1:”0″; #变量名|类型:长度:值
ここでセッション ファイルを削除すると、該当するセッションが無効になります。
(学習ビデオ共有: php ビデオ チュートリアル)
2. セッションはクライアント側 (通常はブラウザ) にどのように存在しますか?
session ブラウザ側では、セッション ID (サーバー側で生成された一意の ID) を保存するだけで済みます。保存するには、Cookie と URL の 2 つの方法があります。セッション ID が Cookie に保存されている場合は、ブラウザーの Cookie に PHPSESID 変数があることがわかります。 URL で渡された場合は、
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381 の形式で URL を確認できます。 (サーバー側では、session.use_cookies を使用して、どのメソッドが使用されるかを制御します)
3. サーバー側では、PHP はセッション ファイルの有効期限が切れているかどうかをどのように判断するのでしょうか。
「現在」までの「最終変更時刻」が gc_maxlifetime (デフォルトは 1440) 秒を超える場合、セッション ファイルは期限切れとみなされます。次のセッションがリサイクルされるとき、ファイルが変更されていない場合、セッション ファイルは削除されます (セッションは期限切れになります)。
簡単に言えば、Web サイトにログインし、1440 秒 (デフォルト値) 以内に操作がなかった場合、対応するセッションは期限切れになったと見なされます。
そこで、php.ini ファイルの gc_maxlifetime 変数を変更して、セッションの有効期限を延長します: (たとえば、有効期限を 86400 秒に変更します)
session.gc_maxlifetime = 86400
その後、再起動します。 Web サービス (通常は Apache) で十分です。
注: PHP5 は、セッションの有効期限が切れたときにリサイクル メカニズムを使用します。ここで設定した時間は 86400 秒です。セッションが 86400 秒以内に変更されなかった場合、セッションは次の「リサイクル」まで削除されません。
3. セッションの「リサイクル」はいつ行われますか?
デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は、次のパラメータによって制御されます。
#概率是gc_probability/gc_divisor session.gc_probability = 1 session.gc_divisor = 100
注 1: この場合、gc_maxlifetime=120 と仮定します。セッション ファイルが最後に変更されたのが 120 秒前であれば、次回 (1/確率 100) これが発生する前は、セッションはまだ有効です。
注 2: セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションのリサイクル メカニズムは期限切れのセッション ファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを手動 (または crontab) で定期的に削除する必要があります: cd /path/to/sessions; find -cmin 24 | xargs rm
4. いくつかの特殊な状況
becauseリサイクルメカニズムのファイルの「最終変更時刻」がチェックされるため、セッションがアクティブであってもセッションの内容が変更されていない場合、対応するセッションファイルは変更されていないため、リサイクルメカニズムはこれを考慮します。長期間アクティブになっていないセッションであることを確認してセッションを削除します。これは見たくないものですが、次の簡単なコードを追加することでこの問題を解決できます:
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>
コードは 60 秒ごとにセッションを変更しようとします。
概要: セッションの有効期限を変更したい場合は、変数 gc_maxlifetime を変更するだけです。 PHP5 のセッションは、受動的なリサイクル メカニズム (ガベージ コレクション) を使用します。期限切れのセッション ファイルは自然には消えませんが、期限切れのセッションは「リサイクル」をトリガーして処理されます。
関連する推奨事項: php 入門チュートリアル
以上がPHPでセッション生存時間を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。