セッション管理

関数

$_SESSION
セッション変数を格納するグローバル変数の配列。
配列のキーには任意の値を使うことができ、session_start後なら変数の値が変更されるとサーバに保存される。
session_start
セッション関連のデータを初期化する。
session_name
引数なしで呼び出すとセッション名を取得する。デフォルトではPHPSESSID。
引数を指定してsession_startの前に呼び出すと現在のセッション名を半角英数字で指定する。
この名前でHTTP-CookieやGET、POSTメソッドなどでやり取りしてセッションIDを自動的にクライアントから取得する。
session_id
セッションIDを取得するにはsession_startより後に呼び出す必要がある。
引数なしで呼び出すとセッションIDを取得する。
引数を指定してsession_startの前に呼び出すと任意のセッションIDを設定する。
session_register
session_startの後に呼び出す必要がある。
session_unregister
session_registerで登録したセッション変数を解除する。
session_unset
全てのセッション変数を削除する。
unset $_SESSION[name]で個別に削除できる。
unset $_SESSION での一括削除はセッション変数の参照元自体が消えてしまうため禁止。
一括削除には $_SESSION = array()を使う。
session_destroy
セッションに登録されたデータを破棄する。
この関数ではCookieは破棄しないため別にsetcookie()で行う必要がある。

セッションとはサーバ側から送出されるセッションIDによってクライアントの状態を保持します。
クライアントはサーバから固有のセッションIDを受け取り、
そのIDをサーバに送ることで直前のセッション変数の値などを受け取ることができます。

セッションの設定

<?php
session_start();		//セッション情報の取得

//セッションの継続
if( isset($_SESSION[count]) ){
	echo("セッションが開始されています。<br>\n");
	$_SESSION[count]++;

//新セッションの開始
}else{
	echo("セッションは閉じています。<br>\n");
	echo("これよりセッションを開始します。<br>\n");
	$_SESSION[count] = 1;
}
echo("セッションIDは「".htmlspecialchars(session_id())."」です。<br>\n");
echo("あなたは".htmlspecialchars($_SESSION[count])."回目のアクセスです。<br>\n");
?>

Cookieが無効なクライアントでも ?SID=セッションID のようにクエリーを渡せばセッションの継続ができる。
Cookieが有効なクライアントの場合はクエリーよりCookieを優先されてしまうようだ。

セッションの破棄

<?php
session_start();		//セッション情報の取得

//セッションの破棄処理
if( $_POST["sdel"] ){
	session_unset();	//セッション変数の解放
	session_destroy();	//セッションの破棄
	setcookie(session_name(), "", time() - 31536000);	//クライアントのCookieの削除(-1年)
	echo "セッションを破棄しました。";
	exit;
}

//セッションの継続
if( isset($_SESSION[count]) ){
	echo("セッションが開始されています。<br>\n");
	$_SESSION[count]++;

//新セッションの開始
}else{
	echo("セッションは閉じています。<br>\n");
	echo("これよりセッションを開始します。<br>\n");
	$_SESSION[count] = 1;
}
echo("セッションIDは「".htmlspecialchars(session_id())."」です。<br>\n");
echo("あなたは".htmlspecialchars($_SESSION[count])."回目のアクセスです。<br>\n");
?>
<form method="POST">
<input type="hidden" name="SID" value="<?php $sid ?>">
<input type="submit" name="sdel" value="セッションの破棄">
</form>

セッション名の変更

<?php
session_name("SID");	//セッション名の設定
session_start();		//セッション情報の取得

//セッションの継続
if( isset($_SESSION[count]) ){
	echo("セッションが開始されています。<br>\n");
	$_SESSION[count]++;

//新セッションの開始
}else{
	echo("セッションは閉じています。<br>\n");
	echo("これよりセッションを開始します。<br>\n");
	$_SESSION[count] = 1;
}
echo("セッションIDは「".htmlspecialchars(session_id())."」です。<br>\n");
echo("あなたは".htmlspecialchars($_SESSION[count])."回目のアクセスです。<br>\n");
echo("セッション名は「".htmlspecialchars(session_name())."」です。<br>\n");
echo("Cookie=".$_COOKIE["SID"].",GET=".$_GET["SID"].",POST=".$_POST["SID"]."<br>\n");
?>

session_nameに英数字の引数を渡すことでそれをセッション名として利用する。
デフォルトでは PHPSESSID が設定されている。
セッション名の設定は必ず session_start の前に行うこと。
session_start後のsession_nameは引数なしでセッション名の取得に用いる。
session_start は新たなセッション名をキーとして CookieやGETやPOSTメソッドからセッションIDを取得する。

$_SESSION 以外の変数をセッション変数に設定する

session_start();
if( isset($_COOKIE["PHPSESSID"]) ){
	echo("セッションが開始されています。\n");
	echo("セッションIDは".$_COOKIE["PHPSESSID"]."です。");
	$count++;
}else{
	echo("セッションは閉じています。\n");
	echo("これよりセッションを開始します。\n");
	$count = 1;
}
session_register("count");
echo("あなたは".$count."回目のアクセスです。");

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規新規下位 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-09-17 (水) 02:55:23 (3294d)