1. PHP の COOKIE
Cookie は、リモートのブラウザ側にデータを保存し、ユーザーの追跡と識別に使用する仕組みです。 PHP は http プロトコルのヘッダー情報に Cookie を含めて送信するため、他の情報がブラウザーに出力される前に setcookie () 関数を呼び出す必要があります。これは header () 関数の制限と同様です。 1.1 Cookie を設定する:
setcookie () または setrawcookie () 関数を使用して Cookie を設定できます。 http ヘッダーをクライアントに直接送信することによっても設定できます。
1.1.1 setcookie() 関数を使用して Cookie を設定します。
bool setcookie ( string name [, string value [, intexpired [, string path [, string domain [, bool secure [, bool httponly]]]]])
name: Cookie 変数名 value: Cookie 変数値 Expired: 有効期限が切れる時刻、
path: 有効なディレクトリ、
Domain: 有効なドメイン名、トップレベルDomain unique secure: if value 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、有効なドメイン名 example.com とそのすべてのサブドメイン* / ?>
複数の Cookie 変数を設定します: setcookie ('var[a]','value'); 変数を表すために配列を使用しますが、この方法では $_COOKIE を使用できます。 [' var ']['a'] を使用して COOKIE 変数を読み取ります。
1.1.2. header() を使用して
ヘッダーを設定します ("Set-Cookie: name=$value[;path=$path[; domain=xxx.com[; ]]");
以下のパラメータ setcookie 関数のパラメータは上記と同じです。
例:
$value = 'something from somewhere';
header ("Set- Cookie:name=$value");
1.2 Cookie の読み取り:
直接 PHP の組み込みスーパーグローバル変数 $_COOKIE を使用して、ブラウザ側で Cookie を読み取ることができます。
上記の例では、Cookie "TestCookie" はそれでは読んでみましょう:
print $_COOKIE ['TestCookie'];
COOKIE 出力ではありませんか?!
1.3 Cookie を削除するには
有効期間を現在の時刻よりも短く設定します。例:
setcookie ("name","", time ()-1);
1.4 よくある質問:
1) エラー メッセージが表示されます。 setcookie() を使用する場合、 setcookie() を呼び出す前に出力またはスペースが存在する可能性があり、ドキュメントが他の文字セットから変換されている可能性もあります (つまり、ドキュメントの最後に BOM 署名がある可能性があります)。解決策は、ob_start() 関数を使用してこの状況が発生しないようにすることです。 2) $_COOKIE は、magic_quotes_gpc の影響を受けるため、自動的に実行される可能性があります。エスケープ 3) 使用する場合、ユーザーが Cookie をサポートしているかどうかをテストする必要があります
1.5 Cookie の動作メカニズム:
一部の学習者はより衝動的で時間がありません。原理を学ぶため、後で説明します
a) サーバーは応答とともに http Set-Cookie ヘッダーを送信することでクライアントに Cookie を設定します (複数の Cookie には複数のヘッダーが必要です)
b) クライアントは自動的に http を送信します。
HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie= どこかからのもの;
有効期限: 木、2007 年 11 月 19 日、18:52:00 GMT
キャッシュ制御: no-store、no-cache、must-revalidate、post-check=0、pre-check=0
プラグマ: no-cache
Content- type: text/html
この行を受け取った後、Set-Cookie: TestCookie=something from something; path=/
ブラウザはそれをクライアントのディスク上に作成し、そこに書き込みます。 :
TestCookie=どこかから来たもの
/
この行は、setcookie('TestCookie','something from somewhere','/'); を使用した結果であり、header('Set-Cookie: TestCookie=something from somewhere; path=/') を使用した結果でもあります。 ;.
2. PHP のセッション
session は、有効期限が 0 に設定された cookie と session と呼ばれる固有の識別子 (長い文字列) を使用します。 ID 文字列)を使用して、サーバー側でいくつかのセッション ファイルを同期的に生成し(セッションのストレージ タイプを自分で定義できます)、それらをユーザー マシンに関連付けます。Web アプリケーションは、これらのセッションに関連するデータを保存し、そのデータを保存できるようにします。
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 (セッション名) で、値は 128 ビットのハッシュ値です。
セッション変数の値は内部でシリアル化されます。 PHP によってサーバー上のテキスト ファイルに保存され、デフォルトで変数名が PHPSESSID であるクライアントのクーリーと対話します。 つまり、サーバーは http header: 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 'Welcome to page #1';
/*セッション変数を作成し、セッション変数に値を代入します*/ $ _SESSION ['favcolor'] = 'green';
$_SESSION ['time'] = time ();
// クライアントが Cookie を使用する場合、セッションを直接 page2.php に渡すことができます
echo '
page 2'; // クライアントが Cookie を無効にする場合
echo '
page 2'
/*
php5 ではデフォルト.2.1 では、SID は cookie の値が書き込まれるときにのみ存在します。セッション
に対応する cookie がすでに存在する場合、SID は (未定義) 空になります*/ ?>
/ / page2.php
session_start ();
print $_SESSION ['animal ']; // 単一のセッションを出力します
var_dump ( $_SESSION ) // page1.php?> によって渡されたセッション値を出力します。
2.3 セッション関数を使用してページ キャッシュを制御します。
多くの場合、Web ページがクライアントにキャッシュされているかどうかを判断する必要があります。たとえば、Web ページに機密コンテンツが含まれている場合などです。 Web ページを表示するにはログインする必要があります。ローカルにキャッシュされている場合は、ログインせずにローカル キャッシュを直接開いて参照できます。
Web ページを使用して、ページ クライアント キャッシュを制御します。 session_start() の前に呼び出す必要があります。
その他のパラメータについては、http://blog.chinaunix.net/u/27731/showart.php ?id=258087 クライアント キャッシュ コントロールを参照してください。
session_cache_expire (s) を使用します。 ) クライアントのキャッシュ時間を制御するには、 session_start() の前にも呼び出す必要があります。これは、セッションを使用するときにキャッシュを制御するための唯一の方法です。
2.4 セッションを削除するには、
session_destroy ( ); // 最初のステップ: サーバー側のセッション ファイルを削除し、setcookie (session_name (),'', time ()-3600); // 2 番目のステップ: 実際のセッションを削除します:
$_SESSION = array ( ); 3 つの手順: $_SESSION グローバル変数配列を削除しますか?>
2.5 PHP の大規模 Web アプリケーションでのセッションの使用は、現在のデフォルトのセッション保存方法には適していません。現時点では、関数 bool session_set_save_handler (callback open、callback close、callback read、callback destroy、callback gc) がこの問題の解決策を提供します
。この関数で使用される関数は次のとおりです:
1. bool open() はセッション ストレージ メカニズムを開くために使用されます。
2. bool close() はセッション ストレージ操作を閉じます
3. この関数を使用します。ストレージからセッション データをロードするとき 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') を使用します。 )、
配列 ('className','read')、
配列 ('className','write')、
配列 ('className','destroy')、
配列 ('className','gc')、
)
className class.className 内の 6 つの静的メソッドを呼び出します。 オブジェクトを変更できる場合は静的メソッドを呼び出す必要はありませんが、静的メンバーを使用する場合はオブジェクトを生成する必要がないため、パフォーマンスが向上します。
2.6 一般的に使用されるセッション関数:
bool session_start (void); セッションの初期化
bool session_destroy (void): サーバー側のセッション関連付けドキュメントを削除します。 string session_id () 現在のセッションの ID
string session_name () 現在アクセスされているセッションの名前。クライアントがセッション ID を保存する Cookie 名です。デフォルトは PHPSESSID です。 array session_get_cookie_params () このセッションに関連付けられたセッションの詳細
string session_cache_limiter () セッションを使用してページのクライアント キャッシュ ini を制御します session_cache_expire () クライアント キャッシュ時間を制御します bool session_destroy ()セッション情報 void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] ) このセッションに関連付けられたセッションの詳細を設定します bool session_set_save_handler ( callback open, callback close, callback read, callback write 、callback destroy、callback gc ) セッションを処理する関数を定義します (デフォルトのメソッドは使用しません)
bool session_regenerate_id ([bool delete_old_session]) 新しいセッション ID を割り当てます
2.7 セッションのセキュリティの問題 攻撃者は、多くの労力が必要です。セッション ID を使用すると、システム内でこのユーザーと同じ機能を持つ可能性があります。したがって、私たちの主な解決策は、セッション ID の有効性を確認することです。 php
if (! isset ( $_SESSION ['user_agent'])){
$_SESSION ['user_agent'] = $_SERVER ['REMOTE_ADDR']
}
/* Ifユーザーセッション ID が偽造されています*/ 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 は生成されません。この時点では、SID は空になります。 ]) {
$_Sactive ['User_agent'] = md5 ($ _Server ['remote_addr']
. $ _Server ['http_user_agent']); ID が偽の場合、セッション ID を再割り当てします */ elseif ( $_SESSION ['user_agent' ] != MD5 ( $_SERVER ['REMOTE_ADDR']
. $_SERVER ['HTTP_USER_AGENT'])) {
/ **
* セッションの有効性を確認します *
*/ function sessionDestroy() {
session_destroy ()
setcookie ( session_name ( ),'', time ()-3600);
$_SESSION = array ();
?>
セッションヘッダー情報が送信される理由は
と同じです。 php5 では、すべての php セッション レジストリ設定オプションはプログラミング中に設定できます。PHP のセッション レジストリ設定オプションを理解するには、マニュアルのセッション処理関数を参照してください。セッションにデータを保存すると、$_SESSION 配列をシリアル化して保存されるため、シリアル化に問題が発生する可能性があります。特殊文字を含む値は、base64_encode 関数でエンコードし、読み取り時にbase64_decode でデコードする必要があります