ホームページ  >  記事  >  バックエンド開発  >  PHPセッションとCookieの使用手順

PHPセッションとCookieの使用手順

WBOY
WBOYオリジナル
2016-06-13 12:35:53742ブラウズ

PHPセッションとCookieの使用手順

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 [, int期限切れ [, stringpath [, stringdomain [, bool secure [, bool httponly]]]]] )?
name: Cookie 変数名 value: Cookie 変数値の有効期限: 有効期間終了時刻、?
パス: 有効なディレクトリ、?
ドメイン: 有効なドメイン名、トップレベル ドメインのみセキュア: 値が 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", / * 有効なディレクトリ/~rasmus、有効なドメイン名 example.com とそのすべてのサブドメイン*/?
?>?


複数の Cookie 変数を設定します: setcookie('var[a]','value'); この方法では、配列を使用して変数を表しますが、その添字には引用符は必要ありません。 $_COOKIE[ 'var']['a'] を使用して COOKIE 変数を読み取ります。?

1.1.2. header() を使用して Cookie を設定します;?
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[; ]]");?
次のパラメータは上記の setcookie 関数 パラメーターは同じです。?
例:?

コードをコピーしますコードは次のとおりです:

$value= 'どこかから来たもの';?
header("Set-Cookie:name=$value");?


1.2 Cookie の読み取り:?

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

print$_COOKIE['TestCookie'];?

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

1.3 Cookieを削除しますか?
有効期限を設定するだけです現在の時刻 time より小さい値に設定し、値を空に設定します。例:?
setcookie("name","",time()-1);?
Use header( ) も同様です。?

1.4 よくある質問:?

1) エラー メッセージがあるsetcookie() を使用する場合、おそらく setcookie を呼び出したため、() の前に出力またはスペースが含まれている可能性があります。また、ドキュメントが他の文字セットから変換され、ドキュメントに BOM 署名がある (つまり、何らかの追加が行われている) 可能性があります。ファイルの内容に隠された BOM 文字が含まれないようにすることが解決策です。この状況が発生しないようにするには、ob_start() 関数を使用する方法もあります。?
2) $_COOKIE は magic_quotes_gpc の影響を受けており、自動的にエスケープされる可能性があります 3) それを使用するとき、ユーザーが Cookie をサポートしているかどうかをテストする必要がありますか?
?

1.5 Cookie の動作メカニズム:?

一部の学習者はより衝動的で、学習する時間がありません。 ?
a) サーバーは、応答とともに http Set-Cookie ヘッダーを送信することで、クライアントに Cookie を設定します (複数の Cookie には複数のヘッダーが必要です)。
b) クライアントは自動的に http Cookie ヘッダーをサーバーに送信し、サーバーはそれを受信して​​読み取ります。?

HTTP/1.x 200 OK?
X-Powered-By: PHP/5.2.1?
Set-Cookie: TestCookie=どこかからの何か path=/?
有効期限: Thu, 19 Nov 2007 18:52:00 GMT?
キャッシュ制御: no-store、no-cache、must-revalidate、post-check=0、 pre-check= 0?
プラグマ: no-cache?
コンテンツ タイプ: text/html?

この行は Cookie 関数を実装します。 Set-Cookie: TestCookie=something from somewhere; path=/?
ブラウザは Cookie ファイルを作成します。 ?

TestCookie=どこかからのもの;?
この行は setcookie(' TestCookie',' を使用する場所です)どこかからの何か','/'); つまり、 header('Set-Cookie: TestCookie=どこかからの何か; path=/');.?
を使用した結果。 ?



2. PHP セッション?

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

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

2.1.2 URL を介してセッション ID を送信します?
これはユーザーが Cookie の使用を禁止している場合にのみ使用されます。ブラウザの Cookie はすでにユニバーサルであるため、このメソッドを使用する必要はありません。
= ">xxx、POST を通じてセッション値を渡すこともできます。?

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

コードをコピーしますコードは次のとおりです:

// page1.php?
session_start();?
echo'Welcome to page #1';?
/* セッション変数を作成し、それに渡しますセッション変数の割り当て*/$_SESSION['favcolor'] = 'green';?
$_SESSION['animal'] = 'cat';?
$_SESSION['time'] = time();?

// クライアントが Cookie を使用している場合、セッションを直接 page2.php に渡すことができますか?
echo'
page 2< ;/a> ';?

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

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



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

session_cache_limiter('private'); を使用すると、ページ クライアント キャッシュを制御できます。これは session_start() の前に呼び出す必要があります。?
パラメータの詳細については、http://blog.chinaunix.net/u/27731/showart.php?id=258087 のクライアント キャッシュ制御を参照してください。?
クライアント キャッシュ時間を制御するには、session_cache_expire を使用します。 ?

これは、セッションを使用するときにキャッシュを制御するためのメソッドです。 header() のコントロール ページ。?

2.4 セッションの削除?

3 つの手順が必要です。?

session_destroy (); // ステップ 1: サーバー側のセッション ファイルを削除し、setcookie(session_name(),'', time()-3600); / ステップ 2: 実際のセッションを削除します:?
$_SESSION= array(); // ステップ 3: $_SESSION グローバル変数配列を削除します?>?

2.5 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 つの静的メソッドを呼び出すと、className は静的メソッドを呼び出さずにオブジェクトを変更できますが、静的メンバーを使用するとオブジェクトを生成する必要がなく、パフォーマンスが向上します。 ?

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

bool 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 が偽造された場合*/elseif($_SESSION['user_agent '] != $_SERVER[' REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {?
session_regenerate_id();?
}?
?>?


2.8 Cookie を通過するセッションと SID を通過するセッションの違い:?
php5.2.1 のセッションのデフォルト設定の場合、セッションが生成されると、サーバーはヘッダー set-cookie を送信しながら (つまり、cookie を書き込み、 SID は同等です。)、$_COOKIE['PHPSESSID'] が存在する場合、Cookie は書き込まれなくなり、スーパー グローバル変数 SID は生成されなくなります。このとき、SID は空になります。?


2.9 セッション使用例
/**?
* セッションの正当性を検証します*?
*/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() {?
session_destroy();?
setcookie(session_name(),'',time()-3600);?
$_SESSION= array();?
}?
?>?

注: ?

session ヘッダー情報が変更された理由Cookie と同じです。?
php5 では、php セッションのすべてのレジストリ設定オプションはプログラミング中に設定できます。通常の状況では、php セッションの設定を変更する必要はありません。レジストリ設定オプションについては、マニュアルのセッション処理関数を参照してください。?
セッションがデータを保存するとき、データは $_SESSION 配列をシリアル化して保存されるため、シリアル化プロパティがあります。 Base64_encode 関数でエンコードし、読み取り時に Base64_decode でデコードする必要がある特殊文字値が存在する可能性があります。

?

出典: http://www.jb51.net/article/22945.htm