ホームページ > バックエンド開発 > PHPチュートリアル > php セッションと cookies_PHP チュートリアルの使用手順

php セッションと cookies_PHP チュートリアルの使用手順

WBOY
リリース: 2016-07-21 15:39:16
オリジナル
807 人が閲覧しました

1. PHP の COOKIE

Cookie は、リモートのブラウザ側にデータを保存し、ユーザーの追跡と識別に使用する仕組みです。 PHP は http プロトコルのヘッダー情報で Cookie を送信するため、他の情報がブラウザーに出力される前に setcookie() 関数を呼び出す必要があります。これは header() 関数の制限と同様です。 1.1 Cookie を設定する:
setcookie() または setrawcookie() 関数を使用して Cookie を設定できます。 http ヘッダーをクライアントに直接送信することによっても設定できます。
1.1.1 setcookie() 関数を使用して Cookie を設定します。
bool setcookie( stringname [, stringvalue [, intexpire [, stringpath [, stringdomain [, bool secure [, bool httponly]]]])
name: Cookie 変数名 value: Cookie 変数の値 Expired: 有効期間が終了する時刻、
path: 有効なディレクトリ、
domain: 有効なドメイン名、トップレベル ドメインのみ安全: 値が 1 の場合、Cookie は https 接続でのみ有効です。デフォルト値が 0 の場合、http と https の両方が受け入れられます。

コードをコピーします。 コードは次のとおりです。 $value= 'どこかからのもの';
setcookie("TestCookie", $value)
/* 簡単な Cookie 設定*/setcookie("TestCookie", $value, time()+3600); * 有効期間は 1 時間です*/setcookie("TestCookie ", $value, time()+3600, "/~rasmus/", ".example.com", 1); /* 有効なディレクトリ/~rasmus、有効なドメインname example.com とそのすべてのサブドメイン*/


複数の Cookie 変数を設定します: setcookie('var[a]','value'); 変数​​を表すには配列を使用します。このように、$_COOKIE['var'] ['a'] を使用して COOKIE 変数を読み取ることができます。
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com [; ]]");
次のパラメータは、上記の setcookie 関数のパラメータと同じです。
例:



Copyコード

コードは次のとおりです:

$value= 'どこかからのもの' header( "Set-Cookie:name=$value");
1.2 Cookie の読み取り:

PHP の組み込みスーパー グローバル変数 $_COOKIE を直接使用して、ブラウザー側で Cookie を読み取ることができます
上の例では、Cookie "TestCookie" が設定されていますので、それを読み取ってみましょう:

print$_COOKIE[ 'TestCookie'];

COOKIE は出力されましたか?!

1.3 Cookie を削除します
有効期間を現在時刻より小さく設定し、値を空に設定します。 例:
setcookie(" name","" , time()-1);
header() の使用と同様です。

1.4 FAQ ソリューション:

1) setcookie() を使用すると、エラー メッセージが表示されます。 setcookie() を呼び出す前にスペースを追加することもできます。ドキュメントが他の文字セットから変換されており、ドキュメントに BOM 署名が含まれている可能性があります (つまり、ファイルのコンテンツに非表示の BOM 文字が追加されている)。 ob_start を使用することもできます。
2) $_COOKIE は、magic_quotes_gpc の影響を受けるため、自動的にエスケープされる可能性があります。ユーザーは Cookie をサポートします


1.5 Cookie の動作メカニズム:

一部の学習者はより衝動的で、原理を勉強するつもりがないので、後ほど説明します
a)サーバーは応答とともに http Set-Cookie ヘッダーを送信し、それをクライアントに設定します (複数の Cookie には複数のヘッダーが必要です)。クライアントは自動的に http Cookie ヘッダーをサーバーに送信し、サーバーはそれを受信して​​読み取ります。

HTTP/1.x 200 OK
X-Powered-By: PHP/ 5.2.1
Set-Cookie: TestCookie=どこかからのもの; path=/
有効期限: 木、2007 年 11 月 19 日 18:52:00 GMT
Cache-Control: no-store、no-cache、must-revalidate、post-check=0、pre-check=0
Pragma: no-cache
Content-type: text/html

この行は Cookie を実装しますこの行を受け取った後、Set-Cookie: TestCookie=something from something; path=/
ブラウザはクライアントのディスク上に Cookie ファイルを作成し、そのファイルに次のように書き込みます。 setcookie('TestCookie','something from somewhere','/') ;つまり、 header('Set-Cookie: TestCookie=something from somewhere; path=/'); を使用した結果です。



2. PHP セッション

session は、有効期限が 0 に設定された Cookie を使用し、セッション ID (長い文字列) と呼ばれる固有の識別子を使用します。サーバー側でいくつかのセッション ファイルを同期的に生成します (セッションの保存タイプを自分で定義できます)。Web アプリケーションはこれらのセッションに関連するデータを保存し、ユーザーとの間でデータを渡すことができます。

ウェブサイトを訪問する訪問者には、一意の識別子、いわゆるセッション ID が割り当てられます。これは、クライアント側の Cookie に保存されるか、URL 経由で渡されます。セッションのサポートにより、ユーザーは任意の数の変数を登録し、リクエストごとに変数を予約できます。訪問者が Web サイトにアクセスすると、PHP は特定のセッション ID がリクエストで送信されたかどうかを自動的に (session.auto_start が 1 に設定されている場合)、またはユーザーがリクエストしたときに (session_start() によって明示的に呼び出されるか、session_register() によって暗黙的にチェックされます。 ))。その場合、以前に保存された環境が再作成されます。 2.1 セッション ID の送信 2.1.1 Cookie によるセッション ID の送信

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

2.1.2 URL を介してセッション ID を送信します。
このメソッドは、ブラウザーの Cookie がユーザーによって禁止されている場合にのみ使用されます。セキュリティ上の理由から、このメソッドは必要ありません。
xxx、または POST 経由でセッション値を渡します

2.2 基本的なセッションの使用例



コードをコピーします

コードは次のとおりです:

// page1.php
session_start();
echo'ページ #1 へようこそ'
/* セッション変数を作成し、セッション変数に値を代入します*/$_SESSION['favcolor'] = ' green ';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time(); クライアントが Cookie を使用する場合、セッションは page2.php に直接渡されます。 echo'
ページ 2';

// クライアントが Cookie を無効にしている場合
echo'
page 2';
/*
デフォルトの php5.2.1 では、セッション
が書き込まれるときにのみ SID が値を持ちます。 Cookie がすでに存在する場合、SID は (未定義) になります*/
?>

// page2.php
print$_SESSION['animal']; / 単一のセッションを出力します
var_dump($_SESSION) // page1.php によって渡されたセッション値を出力します

;

2.3 セッション関数を使用してページのキャッシュを制御します。
多くの場合、Web ページがクライアントにキャッシュされているかどうかを判断したり、キャッシュの有効期間を設定したりする必要があります。たとえば、Web ページに機密性の高いコンテンツが含まれている場合などです。ローカルにキャッシュされている場合は、ログインせずに直接ローカル キャッシュを開いて Web ページを参照できます。

ページ クライアント キャッシュを制御するには、session_cache_limiter('private'); を使用します。 session_start() の前に呼び出されます。
その他のパラメータについては、http://blog.chinaunix.net/u/27731/showart.php?id=258087 を参照してください。
クライアント キャッシュ時間を制御するには、session_cache_expire(int) を使用します。 ; ユニット (s) も使用します。

これは、header() でコントロール ページのキャッシュを制御することもできます。
には 3 つのステップが必要です。
session_destroy(); // ステップ 1: サーバー側のセッション ファイルを削除します。 setcookie(session_name(),'', time()-3600); // ステップ 2:実際のセッションを削除します:
$_SESSION= array (); // ステップ 3: $_SESSION グローバル変数 array を削除します?> PHP 大規模 Web アプリケーションでのセッションの使用現時点では、デフォルトのセッション保存方法は適切ではありません。現時点では、関数 bool session_set_save_handler (callbackopen、callbackclose、callbackread、callbackwrite、callbackdestroy、callbackgc) を使用するのが最善の方法です。 ) は、この問題の解決策を提供します。
この関数で使用される 6 つの関数は次のとおりです:

1. bool open() はセッション保存メカニズムを開くために使用されます。

2. bool close() はセッションを閉じます。ストレージ操作

3. mixde read() ストレージからセッション データをロードするときにこの関数を使用します。 4. bool write () 指定されたセッション ID のすべてのデータをストレージに書き込みます。 5. bool destroy() 指定されたセッションに関連付けられたデータを破棄します。 ID 6. bool gc() ストレージ システム内のデータのガベージ コレクション 例については、PHP マニュアルの session_set_save_handler () 関数を参照してください。
クラスを使用して処理する場合は、session_set_save_handler(
array('className','open) を使用します。 ')、
array('className','close')、
array('className','read')、
array('className','write')、
array('className','destroy') ,
array('className','gc'),
)
className の 6 つの静的メソッドを呼び出す class.className オブジェクトを変更できる場合は静的メソッドを呼び出す必要はありませんが、オブジェクトを変更する場合はオブジェクトを生成する必要はありません。静的メンバーを使用するため、パフォーマンスが向上します。

2.6 よく使用されるセッション関数:

session_start(void); セッションを初期化します。
bool session_destroy(void): サーバー側のセッション関連付けドキュメントを削除します。 stringsession_id() 現在のセッションの ID
stringsession_name() 現在アクセスされているセッションの名前。クライアントがセッション ID を保存する Cookie 名です。デフォルトは PHPSESSID です。arraysession_get_cookie_params() このセッションに関連付けられたセッションの詳細
stringsession_cache_limiter() セッション ini を使用してページのクライアント キャッシュを制御します session_cache_expire() クライアントのキャッシュ時間を制御します bool session_destroy() セッション情報を保存するサーバー側のファイルを削除します void session_set_cookie_params ( int lifetime [, stringpath [, stringdomain [, bool secure [, bool httponly]]]] ) このセッションに関連付けられたセッションの詳細を設定します bool session_set_save_handler ( callbackopen、callbackclose、callbackread、callbackwrite、callbackdestroy、callbackgc ) セッションを定義します処理関数 (デフォルトのメソッドを使用しない)
bool session_regenerate_id([bool delete_old_session]) は、新しいセッション ID を割り当てます


2.7 セッション セキュリティの問題 攻撃者は、既存のユーザーの有効なセッション ID を取得するために多大な労力を費やします。セッション ID は、システム内でこのユーザーと同じ機能を持つことができる可能性があります
したがって、私たちの主な解決策は、セッション ID の有効性を確認することです

if(!isset($_SESSION[ 'user_agent'])){
$_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']
}

/* ユーザーセッション ID が false の場合*/elseif($ _SESSION ['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {
session_regenerate_id()
}
?> 2.8 Cookie を通過するセッションと通過するセッションの違いSID:
php5.2.1 のセッションのデフォルト設定では、セッションを生成するときに、サーバーはヘッダーの set-cookie を送信しながら、事前定義されたスーパー グローバル変数 SID を生成します (つまり、cookie の書き込みと SID のスローは同等です) .)、$_COOKIE['PHPSESSID'] が存在する場合、Cookie は書き込まれなくなり、スーパー グローバル変数 SID は生成されなくなります。


2.9 セッションの使用例<。 ;?php
/**
* セッションの正当性を検証します*
*/functionsessionVerify() {
if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR']
.$_SERVER['HTTP_USER_AGENT']);
}
/* ユーザーセッション ID が偽の場合は、セッション ID を再割り当てします */elseif($_SESSION['user_agent'] != MD5($_SERVER['REMOTE_ADDR']
. $_SERVER['HTTP_USER_AGENT'])) {
session_regenerate_id();
}

/**
* セッションを破棄します
* 3 つのステップで完全に実装され、リークはありません*
*/functionsessionDestroy() {
setcookie(); '', time()-3600);
$_SESSION= array();
?>

注:

セッションヘッダー情報が送信される理由は、php5 では、すべての php セッションが送信されます。登録されたテーブルの設定オプションはすべてプログラミング中に設定可能です。通常の状況では、PHP のセッション レジストリ設定オプションを理解するには、
データを保存する際のセッション セッション処理関数を参照してください。 session は $_SESSION 配列をシリアル化することによって保存されるため、シリアル化に問題が発生する可能性があります。特殊な文字値は、base64_encode 関数でエンコードし、読み取り時に Base64_decode でデコードする必要があります。



http://www.bkjia.com/PHPjc/321607.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/321607.html技術記事 1. PHP の COOKIE クッキーは、リモートのブラウザ側にデータを保存し、それを使用してユーザーを追跡および識別するメカニズムです。 PHP は http プロトコルのヘッダー情報で Cookie を送信するため、setcookie() 関数は...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート