ログイン情報をログアウトするまで保持する - $_SESSION

セッション管理

  • クッキーは、クライアント固有の情報を保持するには良いですが、非常に小さいサイズのテキスト情報しか保存できません
  • そのため、ショッピングサイトのカート情報など、より多くの情報を保持するのに「セッション」と呼ばれる機能を利用します
  • セッションとは、Webシステムにアクセスしたクライアントがそのサイトをログアウトするまでの一連の処理の流れのことです
  • 例えば、ショッピングサイトなどでログインからログアウトするまでを1セッションと呼びます
  • HTTPは、リクエストとレスポンスの1セットごとにやりとりが独立されています
  • これを「ステートレス」と呼びます
  • 一つのWebサイトで、クライアントがログインした後、何度もサーバとやりとりが発生した場合(例えば、ショッピングサイトで色々と買い物をした場合)、リクエストとレスポンスが独立しているため、一連のリクエストとレスポンスがトレースできなくなってしまいます

《input.html》

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<form action="session.php" method="post">
<dl>
<dt>ID</dt>
<dd><input type="text" name="my_id" id="my_id"></dd>
<dt>パスワード</dt>
<dd><input type="password" name="password" id="password"></dd>
</dl>
<input type="submit" value="送信する">
</form>
</body>
</html>


《session.php

<?php
session_start();

if ( isset( $_POST[ 'my_id' ]) ) {
	$_SESSION[ 'my_id' ] = $_POST[ 'my_id' ];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<p>ようこそ<?php print $_SESSION[ 'my_id' ]; ?>さん</p>
<p><a href="./session_second.php">次のページへ</a></p>
</body>
</html>


《session_second.php

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン情報をログアウトするまで保持する</title>
</head>
<body>
<h1>ログイン情報をログアウトするまで保持する</h1>
<p><?php print $_SESSION[ 'my_id' ]; ?>さんの情報はまだ残っています</p>
<p><a href="./logout.php">ログアウトする</a></p>
</body>
</html>


《logout.php

<?php
session_start();

session_unset();
header( 'Location: input.html' );
セッションの開始
  • セッションを開始する処理を記述します


session_start();

  • これでセッション管理が可能になります
  • このsession_start関数は、HTMLやprintでクライアントに出力する前に実行する必要があります
  • 先にクライアントに出力された後に、このsession_start関数を実行するとエラーになります
セッション情報の設定と取得
  • セッションを開始した後は、セッションにデータを保持したり、取得することができるようになります
  • セッション情報の設定は、「$_SESSION」というグローバル変数を使用します
  • この「$_SESSION」は、連想配列になっており、「$_SESSION[セッションの名前]」で取り扱うことができます
  • セッションにデータを保持するには、クッキーのsetcookies関数のような特別な関数を使用せず、単純に代入で設定します



$_SESSION[セッションの名前] = セッションに設定したい値;

  • セッションに格納した値は、「$_SESSION[セッションの名前]」で取得できます
セッション情報の削除
  • ログアウトをしたときなど、一度設定したセッション情報を削除したい場合もあります
  • 全てのセッション情報を削除する場合は、空の配列を「$_SESSION」に代入します


$_SESSION = array();

  • 指定したセッション情報を削除する場合は、unset関数を使用します


unset($_SESSION[セッションの名前]);
 

  • 入力フォームの入力データをセッションに保持しています
  • そのため、inputタグのtype属性にhiddenで値を再設定する必要がなくなります
  • 最初の登録画面では、入力チェックのエラーが合った場合や確認画面から戻ってきた場合のテキストボックスの初期値設定を、セッションから取得するように変更しています