ホームページ  >  記事  >  バックエンド開発  >  SESSIONの生存時間を変更する方法

SESSIONの生存時間を変更する方法

WBOY
WBOYオリジナル
2016-06-13 13:34:27950ブラウズ

SESSION
の生存時間を変更する方法phpSESSION

の生存時間を変更する方法------解決策------ -- ---
session_start();
// 1 日保存
$lifeTime = 24 * 3600
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
実際、Session には、Session の有効期間を設定する関数 session_set_cookie_params() も用意されています。この関数は、session_start() 関数が呼び出される前に呼び出す必要があります。
// 1 日保存
$lifeTime = 24 * 3600;
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 のようになります。各ファイルはセッションに対応します。

詳細 /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:”jiangfeng”;admin|s:1:”0″;
#変数名|type:length:value
削除ここでのセッション ファイルは、対応するセッションの有効期限が切れたことを意味します。

2. セッションはクライアント側 (通常はブラウザ) にどのように存在しますか?

セッションはブラウザ側にあり、セッション 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 | いくつかの特殊なケース

リサイクルのため、メカニズムはファイルの「最終変更時刻」をチェックするため、セッションがアクティブであってもセッションの内容が変更されていない場合、対応するセッション ファイルは変更されていないため、リサイクル メカニズムはこれを考慮します。長期間非アクティブなセッションになった場合は、セッションを削除します。これは見たくないものですが、次の簡単なコードを追加することでこの問題を解決できます。

if(!isset($_SESSION['last_access'])| |(time ()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
コードは 60 秒ごとにセッションの変更を試みます。

概要: セッションの有効期限を変更したい場合は、変数 gc_maxlifetime を変更するだけです。 PHP5 のセッションは、受動的なリサイクル メカニズム (ガベージ コレクション) を使用します。期限切れのセッション ファイルは自然には消えませんが、期限切れのセッションは「リサイクル」をトリガーして処理されます。
------解決策---------
2 階のサポート、以下を追加してください:
バージョン内Apache 1.2 以降では、httpd.conf で次のように設定できます:
KeepAlive on
KeepAliveTimeout 15
これにより、各セッションの保持時間が 15 秒に制限されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。