PHPセッション無効解析データ収集の詳細説明
phpセッション無効解析
PHPの開発プロセス中に、セッションによって生成されたファイルが自動的にクリアできないという問題に頻繁に遭遇する人がいます。実際、クリアすることは実際には不可能ではありませんが、確率はあります。サイトへのアクセス数が十分に多い限り、これらのファイルは自動的に消去されます。アクセス数が比較的少なく、ファイルが見た目に良くない場合は、php.ini で設定することでセッション ファイルを自動的にクリアできます。具体的な設定は次のとおりです。上記の 2 つのパラメータは実際には 1/1000 の確率です
session.gc_pisor = 1000 を session.gc_pisor = 100 に変更します
完全なリアルタイムを実現したい場合は、このパラメータを 1 に変更できます。確率は 100% です
概要: すべての PHP リクエストは、「セッションのリサイクル」をトリガーする確率 (デフォルト値) が 1/100 です。 「セッションのリサイクル」が発生すると、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超える場合、これらのファイルは削除されます。これは、これらのセッションが期限切れになったことを意味します。
1. セッションはサーバー側 (通常は PHP モジュールを備えた Apache) にどのように存在しますか? デフォルトでは、php はセッションを /tmp ディレクトリに保存し、ファイル名は sess_01aab840166fd1dc253e3b4a3f0b8381 のようになります。各ファイルはセッションに対応します。
session.gc_probability = 1 session.gc_pisor = 1000
ここでセッションファイルを削除すると、該当するセッションは無効になります。
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 秒に変更します)
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 username|s:9:”jiangfeng”;admin|s:1:”0〃;
次に、Web サービス (通常は Apache ) を再起動します。それ。
注: PHP5 は、セッションの有効期限が切れたときにリサイクルメカニズムを使用します。ここで設定した時間は 86400 秒です。セッションが 86400 秒以内に変更されなかった場合、セッションは次の「リサイクル」まで削除されません。
4. セッションの「リサイクル」はいつ行われますか?
デフォルトでは、php リクエストごとに 1/100 の確率でリサイクルが行われるため、単純に「100 php リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は次のパラメータによって制御されます
session.gc_maxlifetime = 86400
注 1: この場合、セッション ファイルが最後に変更されたのが 120 秒前であれば、次のリサイクル (1/100 の確率) が発生する前に、gc_maxlifetime=120 であると仮定します。セッションはまだ有効です。
注 2: セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションリサイクルメカニズムは期限切れのセッションファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを手動 (または crontab) で定期的に削除する必要があります:
#概率是gc_probability/gc_pisor session.gc_probability = 1 session.gc_pisor = 100
5. いくつかの特殊なケース
は active ですが、セッションの内容が変更されていない場合、対応するセッション ファイルが変更されていない場合、リサイクル メカニズムはこれが長期間アクティブではなかったセッションであると判断し、削除します。これは私たちが見たくないものですが、次の簡単なコードを追加することでこの問題を解決できます:
cd /path/to/sessions; find -cmin +24 | xargs rm
概要: セッションの有効期限を変更したい場合は、変数 gc_maxlifetime を変更するだけです。 PHP5 のセッションは、受動的なリサイクル メカニズム (ガベージ コレクション) を使用します。期限切れのセッション ファイルは自然には消えませんが、期限切れのセッションは「リサイクル」をトリガーして処理されます。
session_cookie_lifetime 设为 0 的话, 代表等到 browser 才把此 cookie 清掉.(session 和 browser cookie 是有相关的)
セッション有効期限パラメータ
有効期限パラメータを設定します。主に session.gc_maxlifetime のパラメータを設定し、より安全に設定します。 2 つのパラメータini_set('session.cookie_lifetime', 0); // 可用 print_r(session_get_cookie_params()); 观察
ini_set('session.gc_maxlifetime', 3600); // 可用 echo ini_get("session.gc_maxlifetime"); 观察
如果懒得想这些, 直接用下面的 function 就可以了
Session 过期时间程式<?php
function start_session($expire = 0)
{
if ($expire == 0) {
$expire = ini_get('session.gc_maxlifetime');
} else {
ini_set('session.gc_maxlifetime', $expire);
}
if (empty($_COOKIE['PHPSESSID'])) {
session_set_cookie_params($expire);
session_start();
} else {
session_start();
setcookie('PHPSESSID', session_id(), time() + $expire);
}
}
?>
使用方式
于程式最上方加入: start_session(600); // 代表 600 秒后会过期 (取代原本 session_start())
如果要再延长过期时间, 只要再做修改即可.
但是有个问题要注意, 就是 PHP 的 session 预设是存成 file, 所以 /tmp 可能会因这样设定而爆掉(档案太多), 通常解法是把 session 存进 DB/memcache 中.
以上就是php Session无效分析资料整理的详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
