ホームページ  >  記事  >  バックエンド開発  >  PHPのセッションファイルが多すぎる問題とセッションファイルの保存場所については、_PHPチュートリアル

PHPのセッションファイルが多すぎる問題とセッションファイルの保存場所については、_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:56:49859ブラウズ

PHP のセッション ファイルが多すぎる問題とセッション ファイルの保存場所について、

PHP のデフォルトのメカニズム: すべての PHP リクエストに対して、1/100 の確率 (デフォルト値) で「セッションのリサイクル」がトリガーされます。 「セッションのリサイクル」が発生した場合、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超えた場合、これらのセッションは期限切れになったことを意味します。

1.セッションファイルとは

ファイルは通常 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If です


ユーザー名|s:9:"テスト";管理者|s:1:"0";

2. セッションのリサイクルはいつ行われますか

デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は次のパラメータによって制御されます

リーリー

この場合、gc_maxlifetime=120 と仮定します。セッション ファイルが最後に変更されたのが 120 秒前であれば、セッションは次のリサイクル (1/100 の確率) が発生するまで有効です。

セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションリサイクルメカニズムは期限切れのセッションファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを定期的に手動 (または crontab) で削除する必要があります

3. セッション保存ディレクトリを設定します

php5-fpm を使用している場合は、/etc/php5/fpm/php.ini を変更し、次の行を変更または追加します。

リーリー

4. セッションクリアスクリプト リーリー

ここで session.gc_maxlifetime を通じて時間を取得し、スケジュールされたタスク (crontab) に入れることができます

その他の方法

memcacheなどを利用する(session.save_handler = memcache)

Cookieを使用しますが、Cookieは暗号化する必要があります

5. tmfs を使用してセッションを保存します

1. /tmp を tmpfs ファイルシステムとしてマウントします

/etc/fstab を変更し、次の内容を最後の行に追加します: /tmp/sessions tmpfs defaults,size=5120m 0 0


リーリー

2. セッション保存フォルダーを作成します

php はこれらのフォルダーを自動的に作成しませんが、フォルダーを作成するためのスクリプトがソース ファイルで提供されています。以下のスクリプトも使いやすいです スクリプトの内容は以下の通りです

リーリー

/tmp/sessions はメモリに使用されるため、サーバーの再起動後にその中のファイルはすべて失われます。そのため、php を起動する前に、上記のスクリプトを /etc/rc.local に追加して配置する必要があります。

3. セッションを別のディレクトリに保存します

php 自体は、セッションのマルチレベルのハッシュをサポートしています。php.ini で、;session.save_path = /tmp を

に変更します。 リーリー

4. セッションのリサイクル

上記のスクリプトを使用するだけです


PHPセッションデータがどこに保存されているか教えてください


もちろんサーバー側ですが、メモリに保存するのではなく、ファイルまたはデータベースに保存されます。


デフォルトでは、php.iniに設定されているSESSION保存方法はfiles(session.save_handler = files)、つまりファイルの読み書きによってSESSIONデータが保存され、SESSIONファイルが保存されるディレクトリはsession.save_pathで指定されます。 、ファイル名は sess_ で始まり、接頭辞であり、その後に SESSION ID が続きます (例: sess_c72665af28a8b14c0fe11afe3b59b51b)。ファイル内のデータはシリアル化後の SESSION データです。


トラフィックが多い場合、より多くの SESSION ファイルが生成される可能性があります。この場合、SESSION ファイルを保存するための階層ディレクトリを設定すると、効率が大幅に向上します。 save_path"、N は階層レベルです。シリーズ、save_path は開始ディレクトリです。


SESSION データを書き込むとき、PHP はクライアントの SESSION_ID を取得し、この SESSION ID を使用して、指定された SESSION ファイル格納ディレクトリに対応する SESSION ファイルを検索し、存在しない場合は作成し、最後にデータをシリアル化して書き込みます。 。 書類。 SESSION データの読み取りも同様の操作プロセスで、読み取りデータを逆シリアル化する必要があり、対応する SESSION 変数が生成されます。


興味があるかもしれない記事:

PHP5設定ファイルでセッションのパラメータを設定する詳細な説明
  • PHPでセッションとCookieを同時に使用してユーザーのログイン情報を保存する方法
  • PHPはセッションを保存するメソッドを実装していますMySQLを使用する
  • PHPでセッションとJavaScriptを使用してファイルアップロードプログレスバー機能を実装する
  • PHPカスタムファイルにセッションを保存する方法
  • PHPセッションファイルの排他ロックによって引き起こされるブロック問題の解決策
  • phpはセッションとファイルを使用して、オンラインの人数を数えます
  • www.bkjia.com本当http://www.bkjia.com/PHPjc/1111335.html技術記事 PHP のセッション ファイルが多すぎる問題とセッション ファイルの保存場所については、PHP のデフォルトのメカニズム: すべての PHP リクエストに対して、1/100 の確率 (デフォルト値) で「セッションのリサイクル」がトリガーされます。もし...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。