セッション制御の概念は、セッションに基づいて 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"> logut< /a>< br /> ';
} 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 の実行効率を低下させます。 参考: ]
データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









