php のセッション処理メカニズム (翻訳済み)
1.
????? PHP サーバーのデフォルトのセッション保存方法は、Windows では、C:WINDOWSTemp に保存されます。特定のストレージ ディレクトリを指定します。
2.
???? COOKIE テクノロジーは SESSION の実装で使用され、SESSION は session_id (SESSION 番号) を含む COOKIE をクライアント側に保存します。サーバー側。ユーザーがサーバーにリクエストを送信すると、session_id もサーバーに送信され、session_id を通じてサーバー側に保存されている変数を抽出することで、ユーザーが誰であるかを識別できます。同時に、SESSION が時々失敗する理由を理解するのは難しくありません。
???? クライアントが COOKIE を無効にしている場合 (IE の「ツール」-「インターネット オプション」をクリックし、ポップアップ ダイアログ ボックスの「セキュリティ」-「レベルのカスタマイズ」をクリックし、「各セッション COOKIE を許可する」を変更します)が無効に設定されている場合)、session_id は渡されず、現時点では SESSION は無効になります。 ただし、php5 は Linux/Unix プラットフォームで Cookie のステータスを自動的にチェックできます。クライアントが無効に設定されている場合、システムは自動的に session_id を URL に追加して渡します。 Windowsホストにはこの機能がありません。
3.
Session_start(): セッションを開始するか、既存のセッションを返します。
ブラウザは、Session_start() を使用する前に出力を生成してはなりません。そうしないと、次のエラーが発生します。
php.ini で session.auto_start=1 を有効にすると、セッションを使用する前に毎回 session_start() を呼び出す必要がなくなります。
4.
session.auto_start=1 の場合、session_save_path ('./t/'); が無効になります。後者のステートメントを最初に配置する必要があるためです。
5.
サーバーに保存されたセッション ファイルは、session_destroy(); が発生しない限り削除されません。
クライアントのブラウザが閉じている場合でも。
ただし、サーバーによって生成されるすべてのセッション ファイルでは、セッション ファイル名のランダム性と一意性が保証されます。
6. http://www.toplee.com/blog/300.html
PHP のセッション ストレージと処理能力を向上させます
おそらく、多くの PHPer は、セッション関数の処理を容易にする PHP が提供するセッション関数を使用します。Windows では、PHP のデフォルトのセッション サーバー ファイルは *NIX の C:WINDOWSTemp に保存されます。デフォルトでは、/tmp に保存されます。同時アクセスが多い場合、または作成されるセッションが多すぎる場合、これら 2 つのディレクトリに sess_xxxxxx のようなセッション ファイルが多数存在し、パフォーマンスが低下します。劣化し、攻撃によるファイル システム エラーが発生する可能性があります。この状況に対しては、PHP 自体がより良い解決策を提供します。
多くの友人は、php.ini のセッション設定セクションに次のような項目があることに気づいていないかもしれません:
;??? session.save_path = "N;MODE;/path"
この設定により、セッション保存ディレクトリでマルチレベルのハッシュを実行できます。「N」は設定するディレクトリ レベルを表し、「MODE」はディレクトリの権限属性を表します。デフォルトは 600 です。 . WINDOWSの場合 *NIXでは基本的に設定する必要はありません。 以下の「/path」はセッションファイルが格納されているルートディレクトリのパスを示します。次の形式に変換します
session.save_path = "2;/tmp/phpsession"
上記の設定は、PHP セッション ファイルを保存するルート ディレクトリとして /tmp/phpsession ディレクトリを使用し、このディレクトリで 2 レベルのディレクトリ ハッシュを実行することを意味します。ディレクトリの各レベルは 0 ~ 9 および a ~ z、a です。合計 36 文字の英数字がディレクトリ名になります。システム アーキテクチャがセッション データを共有するように設計されている場合、セッションを保存するディレクトリの数は 36 個で十分だと思います。複数のサーバーがある場合は、ディレクトリ レベルをレベル 3 以上に増やすことができます。
PHP 自体はサブディレクトリを自動的に作成しないことに注意してください。ディレクトリを自動的に作成するコードはオンラインで参照できます。以下のコードはレベル 3 のサブディレクトリを自動的に作成します。これは必要に応じて変更できます。
set_time_limit(0);
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
function makeDir($param)
{
??? if(!file_exists($param)) {
??????? makeDir(dirname($param));
??????? ;
??? }
}
for($i = 0; $i <$length; $i ) {
??? for($j = 0; $j <; $length; $j ) {
????????? for($k = 0; $k < $length; $k ) {
????????? string[$i].'/'.$string[$j].'/'.$string[$k]);
?????? }
}
}
?>
前のテキストで、複数のサーバー間での PHP の共有について言及していることに気づいたかもしれません。これは、インターネット上に多数の関連リソースがあります。ここでは一般的な考え方についてのみ言及します。
一般的に、最もよく使用される方法は次の 2 つです。
1. NFS または Samba 共有方法。各サーバー上のセッション ファイルを保存するディスクを共有できます。この方法はシンプルで実行可能です。
2. データベースに集中的に保存する。これは、PHP が提供する session_set_save_handler() 関数を使用して再定義する、比較的一般的な実装方法です。
転載元: http://www.phpweblog.net/fuyongjie/archive/2009/06/09/6687.html