ホームページ > バックエンド開発 > PHPチュートリアル > PHP でのセッション制御についての深い理解

PHP でのセッション制御についての深い理解

黄舟
リリース: 2023-03-15 20:56:01
オリジナル
1422 人が閲覧しました

セッション制御は、ユーザーを追跡する通信方法です。セッション制御の使用は、主に次の点に基づいています。http プロトコルのステートレスな性質により、通常のプロトコルでは 2 つのリクエスト間の関連付けを確立できません。ページ データ転送メソッドは、主にパラメータの転送と、Web サイト上のユーザーの複数のページ間のデータの入力を処理します。異なるデータが存在する場合があります。 get や post を使用するのは非常に面倒です。

1. Cookie の方法

ユーザーを追跡するには、ユーザーが Web サイトの最初のページにアクセスしたときにユーザーをマークする必要があります。情報識別子。Web サーバーはそれをテキスト ファイルの形式でユーザーのコンピュータに保存します。これらのファイルはいわゆる Cookie であり、ユーザーが Web サイトの 2 番目のページ (http ヘッダー) にアクセスしたときに保存されます。 Cookie ファイル内の情報を使用してサーバーにアクセスし、先ほどのユーザー情報を再検証します。これにより、訪問ごとにユーザー情報を入力する必要がなくなり、複数のページ間の訪問が同じユーザーによるものかどうかを判断できます。

Cookieに情報を設定する関数: setcookie($key, $value, $expire, $path, $domain, $secure)。

パラメータは次のとおりです: キー、値、有効期限 (UNIX タイムスタンプ、デフォルトは 0、ブラウザを閉じると Cookie が消えることを意味します)、設定後の Cookie にアクセスするためのパス。サーバーは Cookie (デフォルトはルート ディレクトリ)、Cookie にアクセスするためのドメイン名にアクセスできます。このドメイン名の下にある Web サイト ページ (www.example.com など) のみが Cookie にアクセスでき、Cookie はhttps の安全な接続。

たとえば、post でフォームを送信した後に情報を記録します

<?php    
if(isset($_POST)){        
$time = time();        
setcookie(&#39;user&#39;, $_POST[&#39;user&#39;], $time+3600);  // 时间参数需要比当前时间点大,以表示cookie信息的有效时间    
    setcookie(&#39;data&#39;, array(1,2,3), $time+1200);  // 可以存放各种数据 
    }
ログイン後にコピー

Cookie の削除は、やはり setcookie を通じて行われます。たとえば、時間を進める形式で記述するか、キー名を直接記述するのが最善です。 , ユーザーがクリックして終了したときにこの操作を実行します

   setcookie(&#39;user&#39;, &#39;&#39;, time()-200);  // 时间提前,相对当前时间    
   setcookie(&#39;user&#39;);  // 简写,只写键名
ログイン後にコピー

s 2.セッションメソッド

SESSIONはCookieと似ていますが、もともと存在していたユーザーの情報がサーバーに移されますが、識別子IDを生成します。ユーザー側では、この ID はユーザーのローカル Cookie に保存されるため、セッションは再び Cookie に関連付けられます。このようにして、ユーザーが初めてアクセスしたときに情報が Web サーバーに保存され、その後ユーザーが他のページにアクセスしたときに、固定長の文字列 (セッション ID) がユーザーにランダムに割り当てられます。は、この ID を使用してサーバー上の対応するユーザー データを検索するため、Cookie を使用するセッションは Cookie ベースのセッションと呼ばれます。

ただし、ユーザーは Cookie を無効にするようにブラウザを設定できます (ただし、これは通常は行われません)。ただし、一部の Web サイトでは、Cookie が無効であることを検出した後、このような状況が発生します。この場合、URL の後にセッション ID を付けて get フォームで渡すこともできます。もちろん、http ポスト経由で渡すこともできます。

セッションの使用

まず、session_start()を使用してセッションを開きます。このタイプのネットワーク関数では、

次に、セッション変数を登録します。つまり、ユーザー情報や有用なデータにアクセスするための関数を使用する必要はありません。 $_SESSION['user'] = $_POST[['user'] のように、$_SESSION スーパー グローバル配列に直接保存されます。これらのデータはサーバー上のファイルに保存されます。もちろん、保存される場合もあります。キャッシュ (memcache、redis) 内にあること。

他のページにジャンプするときは、まず session_start() を使用してセッションを開く必要があります。セッションがすでに開かれている場合、この関数は現在のセッションを返し、そうでない場合は再度開きます。

最後に、ユーザーが何らかの理由で会話を終了または破棄した場合、これらの変数はログアウトする必要があります。 4 つのステップ:

1. 最初にセッションを開くか、他のページにジャンプする場合は、既存のセッションに再度戻ります。以前の出力がないことを確認する必要があります

    session_start();   // 开启或返回一个会话
ログイン後にコピー

2. $_SESSION 内の関連する変数をクリアしますarray


 unset($_SESSION[&#39;robert&#39;])  // 销毁某一个变量  
  $_SESSION = array();  // 或者一次性全部销毁会话变量
ログイン後にコピー

3. クライアントに保存されている Cookie をクリアします。セッション ID がユーザーのコンピュータに残っていることを忘れないでください


 if(isset($_COOKIE[session_name()])){        
unset($_COOKIE[session_name()]);    // session_name()获取sesion的名,session id也是以名和值的形式存储的
    }
ログイン後にコピー

4. 完了後、サーバーに保存されている情報を完全に破棄します


  session_destroy();
ログイン後にコピー
4 つのステップでセッションが終了します。



3. セッション制御を使用する基本的な手順は次のとおりです:

1) セッションを開始します

session_start()関数を呼び出すだけです。関数の具体的な機能については、PHPのドキュメントを参照してください。この関数はセッションを使用してスクリプトの先頭で呼び出す必要があることに注意してください。そうしないと、セッションに保存されたすべての情報がスクリプトで使用できなくなります。 session_start() 関数を手動で呼び出すだけでなく、Google で自動的に呼び出すように PHP を設定することもできます。

2)セッション変数を登録する

PHP4.1以降、セッション変数はスーパーグローバル配列$_SESSIONに格納されます。セッション変数を作成するには、$_SESSION['myvar'] = 5;

のように配列に要素を設定するだけです。3) セッション変数の使用

セッション変数を使用するには、非常に簡単です。アクセスして保存する $_SESSION 配列 echo $_SESSION['mywar']; などのセッション変数で十分です。5 が出力されます。セッションを使用する前に、まず session_start() 関数を使用してセッションを開始する必要があります。

4) 変数の登録を解除してセッションを破棄します

変数の登録を解除するには、unset($_SESSION['myvar']) のように unset を直接使用します。すべてのセッション変数を一度に破棄したい場合は、unset($) を使用できます。 _SESSION); セッションの後、最初にすべての変数の登録を解除し、次に session_destroy() を呼び出してセッション ID をクリアする必要があります。

以上がPHP でのセッション制御についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート