php(文法)クッキーとセッションの使い方
6317 ワード
cookie:
Cookieメカニズムはクライアントでステータスを保持するスキームを採用し,Sessionメカニズムはサーバ側でステータスを保持するスキームを採用している.
クッキーは、ブラウザ側にデータを格納し、ユーザを追跡および識別するメカニズムである.
PHPはhttpプロトコルのヘッダ情報にクッキーを送信するので、setcookie()関数は他の情報がブラウザに出力される前に呼び出さなければならない.これはheader()関数の制限と似ている.
cookieの設定:
setcookie()またはsetrawcookie()関数を使用してcookieを設定できます.httpヘッダをクライアントに直接送信することで設定することもできます.
setcookie()関数を使用してcookieを設定します.
フォーマット:bool setcookie(string name[,string value[,int expire[,string path[,string domain[,bool secure[,bool httponly]]]]])
name:cookie変数名value:cookie変数の値expire:有効期間終了時間、path:有効ディレクトリ、domain:有効ドメイン名、上位ドメイン一意secure:値が1の場合、cookieはhttps接続でのみ有効であり、デフォルト値0の場合、httpとhttpsの両方が可能である.
複数のクッキー変数を設定します:setcookie('var[a]','value');配列で変数を表すが、彼の下付きは引用符ではない.これで$このCOOKIE変数をCOOKIE[‘var’][a’]で読み出す.
ヘッダー()を使用してクッキーヘッダーを設定します(「Set-Cookie:name=$value[;path=$path[;domain=xxx.com[]]]]");後のパラメータはsetcookie関数の上にリストするパラメータと同じである.
例えば、$value='something from somewhere';header(“Set-Cookie:name=$value“);
Cookieの読み込み:
直接phpでスーパーグローバル変数$_を内蔵COOKIEはブラウザ側のcookieを読み取ることができる.上記の例では、クッキー「TestCookie」が設定されています.
print $_COOKIE['TestCookie'];
クッキーの削除
有効時間を現在の時間より小さく設定し、値を空に設定するだけです.例えば、setcookie(「name」,「」,time(-1);ヘッダー()で似ています.
よくある問題の解決:
setcookie()を使用する場合、setcookie()を呼び出す前に出力またはスペースがあるため、エラーメッセージが表示される.他の文字セットからドキュメントを変換することもできます.ドキュメントの後ろにBOM署名がある可能性があります(ファイルの内容に隠れたBOM文字を追加します).解決策は、ドキュメントにこのような状況が発生しないようにすることです.またob_を使うことでstart()関数があっても少しは処理できます.
$_COOKIE受magic_quotes_gpcの影響、自動エスケープ可能
使用する場合は、ユーザーがクッキーをサポートしているかどうかをテストする必要があります.
クッキーの動作メカニズム:
サーバは、応答に従ってhttpのSet-Cookieヘッダを送信することによって、クライアントに1つのcookie(複数のcookieは複数のヘッダ)を設定します.クライアントは自動的にhttpのクッキーヘッダをサーバ側に送信し、サーバは読み取りを受信する.
この行はクッキー機能を実現し、この行を受け取った後にSet-Cookie:TestCookie=something from somewhere;path=/ブラウザはクライアントのディスクにクッキーファイルを作成し、TestCookie=something from somewhere;
この行は私たちがsetcookie(‘TestCookie’,‘something from somewhere’,’/’);の結果つまりheader(‘Set-Cookie:TestCookie=something from somewhere;path=/’);と入力します.
Session:
セッション使用期限は0に設定されたクッキーであり、セッションIDと呼ばれる一意の識別子(長い文字列)をサーバ側で同期してセッションファイル(セッションの保存タイプを自分で定義できる)を生成し、ユーザーマシンに関連付けます.Webアプリケーションは、これらのセッションに関連するデータを格納し、ユーザーがページ間でデータを渡すようにします.
ウェブサイトにアクセスする来客には、いわゆるセッションIDという一意の識別子が割り当てられます.クライアントのクッキーに保存するか、URLを介して転送します.
セッションサポートでは、ユーザーが任意の数の変数を登録し、各リクエストに保持して使用できます.来客がウェブサイトにアクセスすると、PHPは自動的に(session.auto_startが1に設定されている場合)、またはユーザーが要求した場合(session_start()によって明示的に呼び出されるかsession_register()は、要求において特定のセッションIDが送信されたかどうかを確認する.もしそうであれば、以前に保存した環境は再構築されます.
セッションIDの転送
セッションの使用start()はセッションを呼び出し,サーバ側はセッションファイルを生成しながらセッションIDハッシュ値とデフォルト値PHPSESSIDのセッションnameを生成し,クライアントに変数(デフォルトは)を送信する.
PHPSESSID(session name)は、128ビットのハッシュ値である.サーバ側は、このクッキーを介してクライアントと対話する.session変数の値はphp内部でシリーズ化され、サーバマシン上のテキストファイルに保存され、お客様と
エンドの変数名は、デフォルトではPHPSESSIDのcoolieに対応するインタラクションを行う.すなわち、サーバはhttpヘッダを自動的に送信する(‘Set-Cookie:session_name()=session_id(); path=/‘);すなわちsetcookie
(session_name(),session_id());ページから新しいページにジャンプしてセッションを呼び出すとstart()後、PHPは、所与のIDに関連付けられたサーバ側に格納されているセッションデータをチェックし、見つからない場合は新しいデータを作成する
を選択します.
URLでセッションIDを転送
ユーザーがクッキーの使用を禁止している場合にのみ使用されます.ブラウザのクッキーはすでに通用しているので、安全のために使用する必要はありません.xxxは、POSTでsession値を渡すこともできます.
Cookieメカニズムはクライアントでステータスを保持するスキームを採用し,Sessionメカニズムはサーバ側でステータスを保持するスキームを採用している.
クッキーは、ブラウザ側にデータを格納し、ユーザを追跡および識別するメカニズムである.
PHPはhttpプロトコルのヘッダ情報にクッキーを送信するので、setcookie()関数は他の情報がブラウザに出力される前に呼び出さなければならない.これはheader()関数の制限と似ている.
cookieの設定:
setcookie()またはsetrawcookie()関数を使用してcookieを設定できます.httpヘッダをクライアントに直接送信することで設定することもできます.
setcookie()関数を使用してcookieを設定します.
フォーマット:bool setcookie(string name[,string value[,int expire[,string path[,string domain[,bool secure[,bool httponly]]]]])
name:cookie変数名value:cookie変数の値expire:有効期間終了時間、path:有効ディレクトリ、domain:有効ドメイン名、上位ドメイン一意secure:値が1の場合、cookieはhttps接続でのみ有効であり、デフォルト値0の場合、httpとhttpsの両方が可能である.
<?php
$value='something from somewhere';
setcookie("TestCookie",$value);/* cookie */
setcookie("TestCookie",$value,time()+3600);/* 1 */
setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".example.com",1);/* /~rasmus, example.com */
?>
複数のクッキー変数を設定します:setcookie('var[a]','value');配列で変数を表すが、彼の下付きは引用符ではない.これで$このCOOKIE変数をCOOKIE[‘var’][a’]で読み出す.
ヘッダー()を使用してクッキーヘッダーを設定します(「Set-Cookie:name=$value[;path=$path[;domain=xxx.com[]]]]");後のパラメータはsetcookie関数の上にリストするパラメータと同じである.
例えば、$value='something from somewhere';header(“Set-Cookie:name=$value“);
Cookieの読み込み:
直接phpでスーパーグローバル変数$_を内蔵COOKIEはブラウザ側のcookieを読み取ることができる.上記の例では、クッキー「TestCookie」が設定されています.
print $_COOKIE['TestCookie'];
クッキーの削除
有効時間を現在の時間より小さく設定し、値を空に設定するだけです.例えば、setcookie(「name」,「」,time(-1);ヘッダー()で似ています.
よくある問題の解決:
setcookie()を使用する場合、setcookie()を呼び出す前に出力またはスペースがあるため、エラーメッセージが表示される.他の文字セットからドキュメントを変換することもできます.ドキュメントの後ろにBOM署名がある可能性があります(ファイルの内容に隠れたBOM文字を追加します).解決策は、ドキュメントにこのような状況が発生しないようにすることです.またob_を使うことでstart()関数があっても少しは処理できます.
$_COOKIE受magic_quotes_gpcの影響、自動エスケープ可能
使用する場合は、ユーザーがクッキーをサポートしているかどうかをテストする必要があります.
クッキーの動作メカニズム:
サーバは、応答に従ってhttpのSet-Cookieヘッダを送信することによって、クライアントに1つのcookie(複数のcookieは複数のヘッダ)を設定します.クライアントは自動的にhttpのクッキーヘッダをサーバ側に送信し、サーバは読み取りを受信する.
HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie=something from somewhere; path=/
Expires: Thu, 19 Nov 2007 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
この行はクッキー機能を実現し、この行を受け取った後にSet-Cookie:TestCookie=something from somewhere;path=/ブラウザはクライアントのディスクにクッキーファイルを作成し、TestCookie=something from somewhere;
この行は私たちがsetcookie(‘TestCookie’,‘something from somewhere’,’/’);の結果つまりheader(‘Set-Cookie:TestCookie=something from somewhere;path=/’);と入力します.
Session:
セッション使用期限は0に設定されたクッキーであり、セッションIDと呼ばれる一意の識別子(長い文字列)をサーバ側で同期してセッションファイル(セッションの保存タイプを自分で定義できる)を生成し、ユーザーマシンに関連付けます.Webアプリケーションは、これらのセッションに関連するデータを格納し、ユーザーがページ間でデータを渡すようにします.
ウェブサイトにアクセスする来客には、いわゆるセッションIDという一意の識別子が割り当てられます.クライアントのクッキーに保存するか、URLを介して転送します.
セッションサポートでは、ユーザーが任意の数の変数を登録し、各リクエストに保持して使用できます.来客がウェブサイトにアクセスすると、PHPは自動的に(session.auto_startが1に設定されている場合)、またはユーザーが要求した場合(session_start()によって明示的に呼び出されるかsession_register()は、要求において特定のセッションIDが送信されたかどうかを確認する.もしそうであれば、以前に保存した環境は再構築されます.
セッションIDの転送
セッションの使用start()はセッションを呼び出し,サーバ側はセッションファイルを生成しながらセッションIDハッシュ値とデフォルト値PHPSESSIDのセッションnameを生成し,クライアントに変数(デフォルトは)を送信する.
PHPSESSID(session name)は、128ビットのハッシュ値である.サーバ側は、このクッキーを介してクライアントと対話する.session変数の値はphp内部でシリーズ化され、サーバマシン上のテキストファイルに保存され、お客様と
エンドの変数名は、デフォルトではPHPSESSIDのcoolieに対応するインタラクションを行う.すなわち、サーバはhttpヘッダを自動的に送信する(‘Set-Cookie:session_name()=session_id(); path=/‘);すなわちsetcookie
(session_name(),session_id());ページから新しいページにジャンプしてセッションを呼び出すとstart()後、PHPは、所与のIDに関連付けられたサーバ側に格納されているセッションデータをチェックし、見つからない場合は新しいデータを作成する
を選択します.
URLでセッションIDを転送
ユーザーがクッキーの使用を禁止している場合にのみ使用されます.ブラウザのクッキーはすでに通用しているので、安全のために使用する必要はありません.xxxは、POSTでsession値を渡すこともできます.
<?php
// page1.php
session_start();
echo ‘Welcome to page #1‘;
/* session session */
$_SESSION['favcolor'] = ‘green‘;
$_SESSION['animal'] = ‘cat‘;
$_SESSION['time'] = time();
// cookie, session page2.php
echo ‘<br /><a href=”page2.php”>page 2</a>‘;
// cookie
echo ‘<br /><a href=”page2.php?‘ . SID . ‘“>page 2</a>‘;
/*
php5.2.1 ,SID cookie , session cookie , SID ( )
*/
?>
<?php
// page2.php
session_start();
print $_SESSION['animal']; // session
var_dump($_SESSION); // page1.php session
?>
''' session .'''
, , , , ,
.
session_cache_limiter(‘private‘); , session_start() .
session_cache_expire(int); (s). session_start() .
session , header() .
''' session'''
.
<pre>
<?php
session_destroy(); // : session ,
setcookie(session_name(),”,time()-3600); // : session:
$_SESSION = array(); // : $_SESSION
?>
<?php
/**
* session
*
*/
function sessionVerify() {
if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR']
.$_SERVER['HTTP_USER_AGENT']);
}
/* session ID , session ID */
elseif ($_SESSION['user_agent'] != MD5($_SERVER['REMOTE_ADDR']
. $_SERVER['HTTP_USER_AGENT'])) {
session_regenerate_id();
}
}
/**
* session
* ,
*
*/
function sessionDestroy() {
session_destroy();
setcookie(session_name(),”,time()-3600);
$_SESSION = array();
}
?>