戻る

セッション変数を使ってユーザIDを使い回す

この例のindex.phpとlogin.phpは、セッション変数を使って、ユーザIDを複数のページ間で使い回す例です。

最初にindex.phpを呼び出すと、ユーザIDとパスワードを入力する画面(いわゆるログイン画面)が表示されます。各データを入力して「送信」ボタンをクリックすると、そのデータを自分自身にPOSTします。

そのデータを受け取ったindex.phpでは、まずパスワードの整合性をチェックします。ここでは非常に簡便な方法ですが、入力されたパスワードが「12345」であれば正しいと判断して、ユーザIDをセッション変数に保存した上でlogin.phpへリダイレクトします。login.phpはユーザごとの「マイページ」や管理者の「管理者ページ」に相当するファイルです。

リダイレクトされたlogin.phpでは、まずユーザIDがセッション変数に保存されているかをチェックします。保存されていれば、ログイン画面でユーザ認証が完了していると判断して、メインコンテンツを表示します。保存されていなければ、ユーザ認証は完了していない(=未認証)と判断して、メインコンテンツを表示せずにログイン画面のindex.phpへリダイレクトします。

index.phpではすでにユーザ認証が行われており、正しいパスワードが入力されたときだけlogin.phpへ進めるようになっているので、login.phpでサイドセッション変数を確認する必要はないように思えます。しかし、一度login.phpというアドレスがわかると、それを直接Webブラウザのアドレス欄に入力すれば、以降はログイン画面をスキップしてlogin.phpの画面を表示できてしまいます。そこでこのような仕組みを採ることによって、ログイン画面を通さないアクセスを拒否できます。

<?php
header("Content-type: text/html; charset=utf-8");
if (isset($_POST["btnExec"])) {
	//送信ボタンがクリックされたとき

	//パスワードが正しいかチェック
	if ($_POST["password"] == "12345") {
		//セッションを開始
		session_start();
		//セッション変数にユーザーIDを保存
		session_register("sesuserid");
		$_SESSION["sesuserid"] = $_POST["userid"];
		//sample14-09-2.phpへリダイレクト
		header("location: login.php");
		exit();
	}
	else {
		print "パスワードが間違っています!<BR><BR>";
	}
}
?>
<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
ユーザーIDとパスワードを入力して[送信]ボタンをクリックしてください。
<form action="<?=$_SERVER["PHP_SELF"]?>" method="POST">
ユーザーID:<input size="20" type="text" name="userid"><br>
<br>
パスワード:<input size="15" type="password" name="password">
<input type="submit" name="btnExec" value="送信">
</form></body>
</html>

<?php
header("Content-type: text/html; charset=utf-8");

//セッションを開始
session_start();

//ユーザーIDがセッション変数に保存されているかチェック
//if (session_is_registered("sesuserid")) {
if (isset($_SESSION["sesuserid"])){

	//セッション変数が設定されているとき
	echo "あなたのユーザーIDは " . $_SESSION["sesuserid"] . " です。<br>";
	echo "<br>";
	echo "*****************************************<br>";
	echo "*****************************************<br>";
	echo "**  ここにユーザーのメインコンテンツ   **<br>";
	echo "*****************************************<br>";
	echo "*****************************************<br>";

}
else {
	//セッション変数が設定されていないとき
	//index.phpへリダイレクト
	header("location: index.php");
	exit();
}
?>

inserted by FC2 system