この例の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(); } ?>