ホームページ  >  記事  >  バックエンド開発  >  PHP バージョン -- HTTP セッション Cookie の原理と応用

PHP バージョン -- HTTP セッション Cookie の原理と応用

WBOY
WBOYオリジナル
2016-07-30 13:29:551022ブラウズ

PHPのCOOKIE

Cookieは、ユーザーを追跡および識別するためにリモートブラウザ側にデータを保存するメカニズムです。
PHP は http プロトコルのヘッダー情報で Cookie を送信するため、他の情報がブラウザーに出力される前に setcookie() 関数を呼び出す必要があります。これは header() 関数の制限と同様です。

------------------------------------------ --- --------------------------------------------------- --- ----------------------------------

1. Cookieを設定します:

a . setcookie() または setrawcookie() 関数を使用して Cookie を設定できます。 http ヘッダーをクライアントに直接送信して設定することもできます。

例:

PhpコードPHP バージョン -- HTTP セッション Cookie の原理と応用

  1. $value = 「どこかから来た何か」 ;
  2. setcookie( "TestCookie", $value); /* 簡単な Cookie 設定 */
  3. setcookie("TestCookie", $value 、時間( )+3600); /* 有効期間 1 時間 */
  4. setcookie("TestCookie", $value, time()+3600, 」/ ~rasmus/",
  5. ".example.com", 1); /* 有効なディレクトリ /~rasmus、有効なドメイン名 example.com とそのすべてのサブドメイン */

複数の Cookie を設定する 変数: setcookie('var[a]','value'); 変数​​を表すには配列を使用しますが、添え字には引用符を使用しないでください。このようにして、$_COOKIE[‘var’][‘a’] を使用して COOKIE を読み取ることができます 変数。

b. header() を使用して Cookie を設定します;

header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[ ; ...]]");

例:

Php コード

PHP バージョン -- HTTP セッション Cookie の原理と応用

  1. $value = 'どこかからのもの' ; header(
  2. "Set-Cookie:name=$value"
  3. ); ------------------------ ---------------------------- ---------------------- ------------------------ 2. Cookie を読み取ります:
PHP の組み込みスーパー グローバル変数 $_COOKIE を使用して、ブラウザ側の Cookie を直接読み取ることができます。

上の例では Cookie "TestCookie" が設定されています。次に読んでみましょう:

例:

Php コード

  1. print $_COOKIE['TestCookie']; -------------------------------------------------------- -------------------------------------------------------- -------------- --------
3.

Cookieを削除

有効時間を以下に設定してください。現在時刻を入力し、値を空に設定します。例:

例:

Php コード

setcookie(PHP バージョン -- HTTP セッション Cookie の原理と応用"name"

,
    " "
  1. 、時間()-1); header() と同様に使用します。
注:

a.

setcookie() を呼び出す前に出力またはスペースがあることが原因である可能性があります。ドキュメントが別の文字セットから変換された可能性もあります。 一方、ドキュメントには BOM 署名が含まれている場合があります (つまり、ファイルの内容にいくつかの隠し BOM 文字が追加されています)。解決策は、文書内でこのようなことが起こらないようにすることです。 ob_start() 関数を使用して少し処理することもできます。

b.

$_COOKIEはmagic_quotes_gpcの影響を受けており、自動的にエスケープされる可能性があります

c.

使用する場合、ユーザーがCookieをサポートしているかどうかをテストする必要があります

- -------------------------------------- ---------------------------------------------------- ---- ------------------------

4. 原則

a. サーバーは http を送信します。応答の Set-Cookie ヘッダーは、クライアントに Cookie を設定します (複数の Cookie には複数のヘッダーが必要です)。

b. クライアントは自動的に http Cookie ヘッダーをサーバーに送信し、サーバーはそれを受信して​​読み取ります。 http/1.x 200 OK ‐ ‐ ‐ ‐ t 、この行を受け取った後

Set-Cookie: TestCookie=something from somewhere; path=/ ブラウザはクライアントのディスク上に Cookie ファイルを作成し、そこに書き込みます:

TestCookie=どこかからの何か;


この行は setcookie('TestCookie','どこかからの何か','/'); を使用した結果です。これは
header('Set-Cookie: TestCookie=どこかからの何か; path=/'); を使用した結果です。


----------------------------------------------------- - - - - -分割線 - - - - - - - - - - - - - - - - - - - - --------------------------------


PHPセッション

session は、有効期限が 0 に設定された Cookie を使用し、セッション ID と呼ばれる一意の識別子 (長い文字列) をサーバー側で同期的に生成します。 ユーザーのマシンに関連付けられたセッション ファイル (セッションの保存タイプを自分で定義できます)。 Web アプリケーションはこれらのセッションに関連するデータを保存し、Web サイトの訪問者に、セッション ID と呼ばれる一意の識別子が割り当てられます。これはクライアント側の Cookie に保存されるか、SESSION を介して渡されるため、ユーザーは任意の数の変数を登録し、リクエストごとにそれらを予約できます。訪問者が Web サイトにアクセスすると、PHP は自動的に (session.auto_start が 1 に設定されている場合)、またはユーザーのリクエストに応じて (session_start() または session_register() によって明示的に呼び出されます) 暗黙的に呼び出されます)、特定の SESSION ID がリクエストで送信されたかどうかを確認します。その場合、以前に保存された環境が再作成されます。

セッションの最も核となる概念は、Web ページ間を移動するための追加データがサーバーに保存され、ID によって識別されることです。セッションを維持するには、ブラウザーは送信ごとにこの ID を持ち込む必要があります。

------------------------------------------ ---------------------------------------------------- ---- ----------------------------------

セッションIDを渡すには2つの方法があります:

a. Cookieを介してSESSION IDを送信します

サーバーはセッションファイルの生成中にセッションを呼び出します。 ID ハッシュ値とセッション名。デフォルト値は PHPSESSID で、クライアントに送信される変数は (デフォルトは) PHPSESSID(セッション名)、値は 128 ビットのハッシュ値です。サーバーは、この Cookie を通じてクライアントと対話します。セッション変数の値は PHP によって内部的にシリアル化され、サーバー マシン上のテキスト ファイルに保存されます。これは、変数名が PHPSESSID であるクライアントのクーリーと対話します。つまり、サーバーは自動的に http ヘッダーを送信します: header(' Set-Cookie : session_name()=session_id(); path=/'); つまり、setcookie(session_name(),session_id());
このページから新しいページにジャンプして session_start() を呼び出すと、PHP は指定された ID セッション データに関連付けられたサーバー側のストレージを確認します。見つからない場合は、新しいデータセットを作成します。

b.URLを介してセッションIDを送信

ブラウザのCookieはすでにユニバーサルであり、セキュリティ上の理由から、このメソッドはユーザーがCookieの使用を禁止している場合にのみ使用されます。この方法は使用されません。
xxx、セッションは POST 経由で渡すこともできます価値。

------------------------------------------ --- --------------------------------------------------- --- ----------------------------------

クライアントが利用を禁止した場合

a. php.ini で session.use_trans_sid = 1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにして、PHP がページ間でセッション ID を自動的に渡すようにします。
b. URL を通じて値を手動で渡し、非表示のフォームを通じてセッション ID を渡します。
c. session_id をファイル、データベースなどに保存し、クロスページプロセス中に手動で呼び出します。

リンク: http://apps.hi.baidu.com/share/detail/41643457

セッションは、Cookie が無効な場合にも使用できます:
session.use_cookies in php.ini = 1、0 に変更すると、セッションはクライアントの Cookie ではなくサーバー側に保存されます。

session.save_path を通じてサーバーのセッションストレージの場所を表示できます

session use:

eg:

Php code PHP バージョン -- HTTP セッション Cookie の原理と応用

  1. // page1.php
  2. session_start();
  3. echo 'へようこそページ #1';
  4. /* セッション変数を作成し、セッション変数に値を代入します */
  5. $_SESSION ['favcolor' ] = '緑'
  6. $_SESSION[の時間 '] = 時間 (); エコー
  7. 'ページ 2'
  8. // クライアントが Cookie を無効にしている場合
  9. ; echo '
    ページ 2' ; /*
  10. php5.2.1 では、セッション がすでに存在する場合、SID は値を持ちます。その場合、SID は (未定義) 空になります
  11. hp コード // page2 .php
  12. session_start();
  13. print $_SESSION['animal'
  14. ];
  15. //単一セッションを出力します
  16. var_dump($_SESSION) ); //印刷page1.php によって渡されたセッション値を出力します。
例:

PHP バージョン -- HTTP セッション Cookie の原理と応用Php コード

  1. session_dest roy(); 最初のステップ: サーバー側のセッション ファイルを削除します。これは を使用します
  2. setcookie(セッション名(),
  3. ''
  4. ,time()-3600); // ステップ 2: 実際のセッションを削除します: $_SESSION =
  5. array
  6. () ; // ステップ 3: $_SESSION グローバル変数配列を削除します ?>---------------------- -------------------------------------------------- -------------------------------------------------- --

    簡単な例:

    phpコード:

    session_start();

    if

    (isset($_SESSION

    ['test_sess'

    ])){

    PHP バージョン -- HTTP セッション Cookie の原理と応用

    1. $_セッション
    2. [
    3. 'test_sess' ]++;
    4. $_SESSION['test_sess' ] = 0; } エコー
    5. $ _SESSION
    6. ['test_sess'
    7. ];
    8. httplook と呼ばれる http パケット スニッフィング ツールを使用してパケットをキャプチャします:
    9. サーバーへの最初のリクエスト:
    10. GET /test.php HTTP/1.1 Accept: */* Referer: http://localhost/
    11. Accept-Language: zh-cn
    12. Accept-Encoding: gzip、deflate ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322) ホスト: localhost 接続: Keep-Alive
    13. サーバー番号 1 回戻ります:
    14. HTTP/1.1 200 OK
    15. 日付: Fri, 26 Aug 2005 07:44:22 GMT サーバー: Apache/2.0。 54 (Win32) SVN/1.2.1 PHP / 5.0.4 DAV/2 X-Powered-By: PHP/5.0.4 Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ojitjogma3; 有効期限: Thu, 19 Nov 1981 08:52:00 GMT
    16. Cache-Control : no -store、no-cache、must-revalidate、post-check=0、pre-check=0
    17. Pragma: no-cache Content-Length: 1 Keep-Alive: timeout=15、 max=99 接続: Keep-Alive Content-Type: text/html; charset=utf-8 Content-Language: Off
    サーバーへの 2 番目のリクエスト:

    GET /test.php HTTP/1.1 Accept: */*

    Referer: http://localhost/

    Accept-Language: zh-cn Accept-Encoding: gzip、deflate User-Agent : Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)

    ホスト: localhost

    接続: キープアライブ Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3


    セカンドサーバーの戻り値:




    HTTP/1.1 200 OK
    日付: Fri, 26 Aug 2005 07:44:23 GMT
    サーバー: Apache/2.0.54 (Win32) SVN/1.2.1 PHP/5.0.4 DAV/2
    X- Powered-By: PHP/5.0.4
    Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
    有効期限: Thu, 19 Nov 1981 08:52:00 GMT
    キャッシュ制御: ストアなし、キャッシュなし、必須revalidate、post-check=0、pre-check=0
    プラグマ: キャッシュなし
    Content-Length: 1
    Keep-Alive: timeout=15, max=98
    Connection: Keep-Alive
    Content-Type: text/ html; charset=utf-8
    Content-Language: OFF
    This ヘッダーは Cookie 情報をサーバーに送信し、PHPSESSID という名前の Cookie があり、その内容が bmmc3mfc94ncdr15ujitjogma3 であることをサーバーに伝えます。
    このクッキーはどこから来たのですか?初めてサーバーから返された情報を確認します:
    Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/

    これは、クライアントのブラウザーに Cookie を書き込むサーバーです。名前は PHPSESSID、値は bmmc3mfc94ncdr15ojitjogma3 です。実際にはいわゆる session_id です。

    引き続きサーバーへの 2 番目のリクエストを確認すると、Cookie PHPSESSID が引き続きサーバーに送信されます。 以下の結論が得られます: 1. セッションが使用されている限り、セッションはクライアントのブラウザーに送信されます。 Cookie を介して

    2. サーバーにリクエストが行われるたびに、ローカル ブラウザはリクエスト情報に Cookie を添付します

    実際、セッションが実際に行うことは次のとおりです。 http および post によって提供されるパラメータは、追加情報を保存できる特定のユーザー (おそらくブラウザー、コンピューター、または IP) をターゲットとしています。システムが提供するセッションを使用しない場合は、データを転送することもできます。たとえば、最初にセッションに保存したいデータをシリアル化し、暗号化して文字列を形成し、すべての URL とフォームに渡すこともできます。ページ。サーバーはページリクエストを受信した後、get または post からシークレット文字列を取り出し、それを明らかにし、データを復元します。これは実際にはセッションと同じです。ただ、このメソッドは非常に優れており、実装するには余分な作業が多すぎるだけです。 技術的な観点から見ると、セッションとは、Web ページのリンク間に保存される追加データに ID を付けてサーバー側に保存することです。ブラウザは取得または投稿ごとに適切な ID を提供するだけで済みます。以前に保存されたデータ。 PHP はデフォルトでファイルを使用してデータを保存します。 Unix では、PHP は通常、/tmp の下に「sess_」+$session_id のようなファイル名を作成します。この名前を通じて、session_id に対応するデータを直接見つけることができます。 したがって、セッションの最も中心的な概念は、Web ページ間を移動するための追加データがサーバーに保存され、ID で識別されることです。セッションを維持するには、ブラウザーは送信ごとにこの ID を取得する必要があります。
    ブラウザはどのようにしてリクエストごとにこの ID を取得できるのでしょうか? もちろん、愚かな方法は、各 URL リンクまたはフォーム投稿に ID パラメータを追加することです。一部の Web メールは実際にこれを行っています。もちろん、より簡単な方法は、Cookie を使用して保存することです。しかし、Cookie ソリューションにはまだ問題があります。ブラウザが Cookie をサポートしていない場合はどうすればよいでしょうか? これは、上記でも述べたように、php4 および 5 によって提供されるセッション機能です。 php4 より前のセッション関数!また、多くの CGI プログラムは完全に自己実装されたセッションです。 php(4,5) によって提供されるセッションの場合、システムはデフォルトで Cookie を使用して session_id を保存します。以前のプロジェクトでは、ユーザーはすべてイントラネット上の Web を使用していました。管理を容易にするために、ブラウザ IP はセッションに直接関連付けられます。つまり、セッション ID の代わりにブラウザ IP アドレスが使用されます。このソリューションには Cookie はありませんが、セッションの定義の範囲外ではないため、依然としてセッションです。







    サーバーにリクエストが行われるたびに、ローカルブラウザはリクエスト情報にCookieを添付します
    実際、それはセッションとは何の関係もなく、単にCookieがどのように機能するかについてですhttp プロトコル。この Cookie は session_start() 関数によって書き込まれ、有効期限が切れていない限り、ブラウザが任意に送信することもできます。

    上記では、PHP バージョン - HTTP セッション Cookie の原理とアプリケーションを、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHPの配列操作次の記事:PHPの配列操作