ホームページ >バックエンド開発 >PHPチュートリアル >PHP セッション制御_PHP チュートリアル
セッション制御の概念は、セッションに基づいて Web サイト内のユーザーを追跡する機能です。
クッキー1個
1.1 クッキーとは
: 有効期限が設定されていない場合、Cookie は手動で削除されない限り永久に有効になります)。パスとドメインのフィールドは一緒に、Cookie に関連付けられた URL を指定します。 secure キーワードは、Cookie が通常の HTTP リンクで送信されないことを意味します。
1.2 PHP経由でCookieを設定する
PHP で Cookie を手動で設定するには、setcookie() 関数を使用します。関数のプロトタイプは次のとおりです:
Set-Cookie: NAME = VALUE; [有効期限 = DATE;] [パス = PATH;] [ドメイン = DOMAIN_NAME;] [安全]
: Cookie ヘッダーは である必要があります。そうでない場合は無効になります (これは Cookie の制限であり、PHP の制限ではありません)。
1.3 セッションでの Cookie の使用
1.4 セッションIDを保存する
2 簡単な会話を実装します
2.1 セッションを開始する
2.2 セッション変数を登録する
2.3 セッション変数の使用
2.4 変数の登録を解除し、セッションを破棄する
を使用できます。
ID をクリアする必要があります。
3簡単な会話(例)
auto-main.php
bool setcookie(文字列名 [, 文字列値 [, int期限切れ [, 文字列パス [, 文字列ドメイン [, int secure]]]]])
' ;
?>
<br />
<a href ="会員限定.php"> メンバーセクション a > ボディ >
html>
3.2 members_only.php
<スパン session_start();
<スパン
<スパンif<スパン(<スパンisset <スパン($_POST[<スパン'userid'<スパン]) & & <スパン isset<スパン($_POST[<スパン'パスワード'<スパン])){
<スパン $userid = $_POST[ <スパン 'userid'<スパン ];
<スパン $password = $_POST[ <スパン 'パスワード'<スパン ];
<スパン
$db_conn = new mysqli('localhost' , <スパン 'root' <スパン , <スパン '' <スパン , <スパン 'テスト' <スパン );
<スパン
<スパン <スパン if<スパン (mysqli_connect_error()){
echo 「データベースへの接続に失敗しました:」 。 mysqli_connect_errno();
<スパン <スパン 終了<スパン ();
<スパン }
<スパン
$query = "select * from allowed_users" . " where name = '$userid'" <スパン . <スパン " およびパスワード = '<スパン $password<スパン '" <スパン ;
<スパン
$result = $db_conn ->クエリ($クエリ);
if($result -> num_rows > 0){
$_SESSION[ 'valid_user'] = $userid;
}
$db_conn ->閉じる();
}
?>
<html>
<ボディ >
<h1 >ホームページ h1 & gt;
if( isset($_SESSION[ 'valid_user' ])){
echo 'あなたは次のようにログインしています: ' 。 $_SESSION['valid_user'] . '
' ;
href = "logout.php"&gt; logut&lt; /a&gt;&lt; br /&gt; ';
} else {
if( isset($userid)){ //失败
echo 「ログインできませんでした。
」;
} else {
echo 'ログインしていません。
';
}
}
echo '
ユーザーID:
パスワード:
session_start();
echo 「メンバー限定」; if(isset ($_SESSION['valid_user' ])){ echo "あなたは「 」としてログインしています。 $_SESSION['valid_user' ] . ""; echo "メンバー限定のコンテンツはここにあります " ; } else { echo "ログインしていません。 " ; } echo "メインページに戻る"; ?> |
session_start();
$old_user = $_SESSION['有効なユーザー'];
設定解除($old_user);
session_destroy();
?>
<html>
<ボディ >
<h1 >ログアウト h1 & gt;
if(! 空($old_user)){
echo 'ログアウトしました。 '; } else { echo 'ログインしていないため、ログアウトされていません。 '; } ?> <a href ="auto-main.php"> メインページに戻る a> ボディ > html> |
session_start() ライフサイクルの始まりであるセッションを初期化します。
セッション初期化操作では、メモリに保存されているセッション データをマップするグローバル配列 $_SESSION を宣言します。セッション ファイルが既に存在し、セッション データが保存されている場合、session_start() はセッション データを読み取り、$_SESSION にデータを入力し、新しいセッション ライフ サイクルを開始します。 (2) $_セッション セッションのライフサイクル中に、グローバル変数名を使用して、グローバル変数を現在のセッションに登録します。いわゆる登録とは、$_SESSION に変数を記入することであり、その値は NULL です。セッション ファイルに対して IO 操作は実行されず、$_SESSION 変数にのみ影響します。正しい書き方は session_register($varname) ではなく session_register(‘varname’) であることに注意してください (4) session_unregister() これは session_register 操作のまったく逆です。つまり、セッションのライフサイクル中に、指定された変数が現在のセッションから登録解除されます。また、$_SESSION にのみ影響し、IO 操作は実行されません。 (5) session_unset() セッションのライフサイクル中に、現在のセッションからすべてのセッション データをログアウトし、$_SESSION を空の配列にします。 unset($_SESSION) との違いは、unset は $_SESSION 変数を直接削除し、メモリ リソースを解放することです。もう 1 つの違いは、session_unset() はセッション ライフ サイクル中にのみ $_SESSION 配列を操作できるのに対し、unset() はセッション ライフ サイクル中にのみ操作できることです。ページ (ページ) ライフサイクル全体で $_SESSION 配列を操作できます。 session_unset() も IO 操作を実行せず、$_SESSION 配列にのみ影響します。 (6) session_destroy() session_start() がセッションを初期化すると、セッションがログアウトされます。これは、セッションのライフサイクルが終了したことを意味します。セッションのライフサイクルが完了すると、session_register、session_unset、session_register は $_SESSION 配列を操作できなくなりますが、$_SESSION 配列は unset() などの関数によって引き続き操作できます。この時点では、セッション平均は未定義であり、$_SESSION はまだグローバル変数であり、マッピング関係の外にあります。 session_destroy() を通じてセッションをログアウトすると、セッションのライフサイクルが終了するだけでなく、セッション ファイルも削除されますが、現在の $_SESSION 変数には影響しません。つまり、IO 操作が生成されます。 (7) session_regenerate_id() これを呼び出すと、現在のユーザーに新しいセッション ID が再割り当てされます。現在のページのライフサイクルが終了すると、現在のセッション データがセッション ファイルに書き込まれます。前提条件は、この関数を呼び出す前に現在のセッションのライフサイクルが終了していないことです (ポイント 9 を参照)。この関数を呼び出してすぐに新しいセッション ファイルを作成するのではなく、IO 操作が生成され、新しいセッション ファイルが作成されます。 (8) session_commit() session_commit() 関数は session_write_close() 関数のエイリアスです。現在のセッションのライフサイクルが終了し、セッション データがセッション ファイルに直ちに書き込まれます。 session_commit() を使用してセッション データを手動で書き込むことはお勧めできません。PHP は、ページのライフ サイクルが終了すると、現在の未終了のセッション ライフ サイクルを自動的に終了するためです。 IO書き込み操作が生成されます (9) セッション終了 セッションを終了します。デフォルトでは、ページのライフサイクルが終了する前に、PHP は現在の終了していないセッションを自動的に終了します。ただし、session_commit() 関数と session_destroy() 関数を使用してセッションを早期に終了することもできます。どの方法を使用しても、セッションを終了すると、異なる IO 操作が生成されます。デフォルトでは、IO 書き込み操作が生成され、現在のセッション データがセッション ファイルに書き戻されます。 session_commit() は、関数が呼び出された瞬間に IO 書き込み操作を生成し、セッション データをセッション ファイルに書き込みます。 session_destroy() との違いは、データをセッション ファイルに書き戻すのではなく、現在のセッション ファイルを直接削除することです。興味深いことに、session_commit() も session_destroy() も、$_SESSION 配列を削除することはもちろん、$_SESSION 配列をクリアしません。ただし、現在のセッションのライフサイクルが終了したため、すべての session_* 関数はセッション データを操作できなくなります。未定義のオブジェクトは操作できません。 4.2概要 1. ユーザーが Web アプリケーション システムからログアウトする場合、最適な呼び出しメソッドは session_unset(); unset($_SESSION); です。 2. $_SESSION にキーと値を入力してみます。 session_register() の使用はお勧めしません。同様に、session_unregister() の代わりに unset($_SESSION[‘var’]) を使用してみてください。 3. 多数のセッションを生成する可能性のある WEB アプリケーションの場合、session.save_path の推奨形式は session.save_path="N:/path" です。注: これらのディレクトリは手動で作成し、httpd デーモンが所有する書き込み権限を持つ必要があります。パフォーマンスを向上させるためにこれを実行してください 4、 session_regenerate_id() が呼び出され、新しいセッション ID がユーザーに割り当てられる場合。この機能は古いセッション ファイルを積極的に削除しません。古いセッション ファイルは定期的にクリーンアップする必要があるため、より最適化されます。 5. session_commit() を使用してセッションデータを送信しないようにしてください。デフォルトでは、PHP はページのライフサイクル中にセッションデータをセッションファイルに送信します。 結局のところ、セッションはユーザーのステータス情報を管理するためにのみ存在します。セッション ID の意味について説明しました。訪問している各ユーザーには、他のユーザーのセッション データを区別するために使用される一意のセッション ID が割り当てられます。つまり、セッション ID は入場券と同じようにユーザーを識別するものです。ユーザーにセッション ID が割り当てられると、各アクセス (http リクエスト) でこのセッション ID がサーバーに送信され、ユーザーのセッション データがロードされます。では、それをサーバーに渡すにはどうすればよいでしょうか?これがこのセクションで説明する内容です。 クライアントとサーバー間の Web 通信プロトコルは http です。 PHP が http 経由でユーザー データを取得するために一般的に使用される 3 つのメソッドは、POST メソッド、GET メソッド、および Cookie です。 PHP のデフォルトの配信方法は Cookie であり、これも最適な方法です。クライアントが Cookie をサポートしていない場合 (ブラウザが Cookie 機能を無効にしている場合) に限り、session_id は GET メソッドを通じて渡されます。つまり、URL の query_string 部分でセッション ID が渡されます。 転送方法を決定した後も、セッション ID の転送プロセスを理解する必要があります。ユーザーはブラウザを通じて Web ページにアクセスし、アドレス バーに URL を入力して Enter キーを押します。ブラウザはソケット送信を呼び出す前に、http リクエストの Cookie フィールドにカプセル化された有効な Cookie レコードを検索します。ヘッダーを付けて一緒に送信します。サーバーがリクエストを受信すると、リクエストは処理のために PHP に渡されます。このとき、セッション初期化関数は、$_COOKIE のキー値として session_name() で格納された値 (値はセッション ID) を見つけられなかった場合、ユーザーが初めて Web にアクセスしたものとみなします。初めてアクセスするユーザーとして、セッション初期化関数は常にランダムに session_id を生成し、setcookie() 関数呼び出しを通じて、新しく生成された session_id を http 応答ヘッダーの Set-Cookie フィールドに「sesseson_name = session_id」の形式で埋めます。そしてそれをクライアントに送信します (これにより、後続のリクエストで HTTP リクエスト ヘッダーの Cookie フィールドによって Cookie レコードが Web サーバーに送信されます)。初期化関数がユーザー側 Cookie に $_COOKIE['sess_name'] が定義されていることを検出すると、$_COOKIE['sess_name'] に対応するセッション ファイルをロードします ($_COOKIE['sess_name'] はセッション ID) )。ユーザーの Cookie レコードの有効期限が切れると、ブラウザによって削除されます。その後の次のリクエストに対して、サーバーはそれがユーザーの再度の最初の訪問であるとみなします。 4.4 セッションのリサイクル 4.5 概要 1、PHP は Cookie メソッドを使用してセッション ID を渡します。 GET メソッドを使用してセッション ID を渡すのは非常に危険であるため、使用しないでください。 2. setcookie() メソッドを使用して、クライアントのセッション ID の Cookie レコードを削除できます。 3. PHP GC プロセスはセッションの初期化によって開始されます。ただし、すべてのユーザー要求が開始されるわけではありません。デフォルトでは、その開始確率は 1/1000 です。アクセス頻度が高すぎる Web サイトや同時実行数が多い Web サイトでは、PHP GC の起動頻度が低下する可能性があります。 PHP GC リサイクル セッションは、PHP の実行効率を低下させます。 参考: ]