ホームページ >バックエンド開発 >PHPチュートリアル >PHPセッションの詳細分析_PHPチュートリアル
1. PHPセッションの仕組み
デフォルトでは、SESSION ファイルが保存されるディレクトリは、sess_c72665af28a8b14c0fe11afe3b59b51b のように、ファイル名の先頭に sess_ が付けられ、その後に SESSION ID が続きます。ユーザーのファイルを取得し、クライアントから提供されたセッション ID に基づいて変数の値を取得できます。セッション ID は、クライアントの Cookie または Http1.1 プロトコルの Query_String (部分) を使用してサーバーに送信できます。アクセスされた URL の「?」の後)、サーバーはセッション ディレクトリを読み取ります。つまり、セッションIDはサービス上に保存されているセッション変数を取得するためのIDカードです。
session_start(); コードが実行されると、サーバー上にセッション ファイルが生成され、それに一意に対応するセッション ID が生成され、生成されたセッション ファイルに特定の形式で格納されるように定義されます。セッション ID を通じて、定義された変数を取得できます。ページを通過した後、セッションを使用するには、session_start() を再度実行する必要があります。別のセッション ファイルが生成され、それに応じて、このセッション ID を使用して最初のセッション ファイルを取得することはできません。このセッション ID はセッションを開くための「キー」ではないため、変数は入力されます。 session_start(); の前にコード session_id($session id); を追加すると、新しいセッション ファイルは生成されず、この ID に対応するセッション ファイルが直接読み取られます。
2. Session
の共通機能と使い方
2.1 Session_start(): セッションを開始するか、既存のセッションを返します。
この関数にはパラメータがなく、戻り値は true です。 Cookie ベースのセッションを使用する場合、Session_start() を使用する前にブラウザは出力を生成できません。php.ini で session.auto_start=1 を有効にすると、セッションを使用するたびに session_start() を呼び出す必要がなくなります。セッション。ただし、このオプションを有効にする場合はいくつかの制限があります。session.auto_start が実際に有効になっている場合は、セッション内でオブジェクトを再作成するためにセッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。
2.2 SESSION変数を登録:
PHP5 は、$_SESSION[‘xxx’]=xxx を使用して SESSION グローバル変数を登録します。 session_register() に注意してください
session_unregister、session_is_registered は、php.ini で変更されない限り、php5 では使用されなくなりました
Register_globle はオンに設定されていますが、セキュリティ上の理由から、 register_globle をオフにすることを強くお勧めします。
HTTP_SESSION_VARS の使用は推奨されなくなり、代わりに $_SESSION を使用することが公式に推奨されています。
Page1.php
session_start(); //この関数は SESSION を使用する前に呼び出す必要があります。
$_SESSION[‘name’]=”私はブラックトルネード李逵です!” //SESSION変数を登録します
;
$_SESSION[‘passwd’]=”mynameislikui”;
$_SESSION[‘時間’]=時間();
// クライアントが Cookie をサポートしている場合、このリンクを通じてセッションを次のページに渡すことができます。
echo '
COOKIE を介して SESSION を渡す';
// クライアントが Cookie をサポートしていない場合、このメソッドを使用してセッションを渡します。
echo '
URL を通じて SESSION を渡す';
Page2.php
session_start();
echo $_SESSION['name'];
echo $_SESSION['passwd'];
echo date('Y m d H:i:s', $_SESSION['time']);
echo '
前のページに戻る';
?>
2.3 session_id ([ string $id ] ): 現在のセッション ID を取得および/または設定します
php5 では、session_id() を使用するか、URL に添付された SID を通じて現在のセッションの session_id と session_name を取得できます。
session_id() に特定の値がある場合 (つまり、パラメーター $id が指定されている場合)、現在の session_id 値が置き換えられます。この関数を使用する前にセッションを開始する必要があります: session_start();
例: セッションの有効期間を手動で設定します:
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_set_cookie_params($lifeTime);
session_start();
$_SESSION["管理者"] = true;
?>
クライアントが IE 6.0 を使用している場合、session_set_cookie_params() 関数で Cookie を設定する際に問題が発生するため、引き続き setcookie 関数を手動で呼び出して Cookie を作成します。
2.4 セッションが存在するかどうかを確認しますか?
以前の PHP バージョンでは、通常、セッションが存在するかどうかを確認するために session_is_register() が使用されていましたが、$_SESSION[‘XXX’]=XXX を使用してセッション変数を登録すると、session_is_register() 関数は機能しなくなります。
を使用できます
代わりに isset($_SESSION[‘xxx’]) を使用します。
2.5 session_id の変更 session_regenerate_id([bool $delete_old_session]) 変更が成功した場合は true を返し、失敗した場合は false を返します。
この関数を使用して現在のセッションの session_id を変更しますが、$delete_old_session が true でない限り、現在のセッションの他の情報はデフォルトでは変更されません。例:
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "元のセッションID: $old_sessionid
";
echo "新しいセッションID: $new_sessionid
";
echo"
";<br> print_r($_SESSION);<br> エコー"";