Sessionについて記述していきたいと思います。6月8日記事
ログインしたページを回っている時に、別のページにいっても、また別のページにいっても、個人の情報がついてまわるときありますよね?その部分をどう実装しているのかというお題です。これには2つの方法がありSession管理とクッキーというものがあります。今回はSession管理についてお話していきたいと思います。クッキーはまた後々話していきます。
ログイン時にサーバに個人の情報(名前、HN、属性情報等)をSessionファイルとして発行し、それを使いまわしながらサイトを閲覧していきます。そして、そのSessionファイルの生存時間というものを指定でき、指定した時間がたてば、sessionファイルを削除させることもできます。
よく、ログインページでまったく操作せず放置しておいて、あとあとまた見た場合に、いきなりログアウトされる場合がありますよね?その場合はSessionファイルがなくなり、個人の情報を引きづり回せなくなったという状況を意味しています。その場合、またログインしたりして、Sessionファイルをサーバに作り、それをもとにまたページを徘徊します。このような管理のことを
Session管理
といいます。
このプログラムを使っても、IDやパスワードが暗号化されるとは限りません。通信を暗号化したい場合はこの方法+SSL暗号化通信を使いましょう。
また、このプログラムを書いてもsessionファイルがサーバから自動的に削除された場合に、そのサイトに引き続き居座ってしまう状況になっています。あくまでsessionファイルをどう作るかという観点で話しを進めていきますのでご了承ください。
作成イメージ

index.php
<?php
$id = (string)filter_input(INPUT_POST,'id',FILTER_SANITIZE_STRING);
$password = (string)filter_input(INPUT_POST,'password',FILTER_SANITIZE_STRING);
/*ここに多数の会員がいるようなサイトならデータベースを呼び出し、認証するのだが・・
今回は、IDをuser PASSをpasswordにします。*/
$auth_id = 'user';
$auth_password = 'password';
$error = '';
if(isset($_POST["submit"])){
if(($id == $auth_id) && ($password == $auth_password )){
//Sessionファイル発行
session_set_cookie_params(15);//15秒間のsession時間
session_start();
$_SESSION["id"] = $id;
$_SESSION["passwd"] = $password;
$_SESSION["name"] = '管理者';
//sessionファイルをもったままホームへ移動
header("Location: ./home.php");
exit;
}else{
$error = 'IDまたはパスワードが違います。';
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>ログインページ</title>
</head>
<body>
<form action="index.php" method="post">
<dl>
<dt>ID</dt>
<dd><input type="text" name="id"></dd>
<dt>パスワード</dt>
<dd><input type="password" name="password"></dd>
<?php
print "<br>".$error."<br>";
?>
<input type="submit" name="submit" value="login">
</form>
</body>
</html>
フォームの宛先は自分自身に対してリダイレクトさせます。
こんな感じに出来上がります。

home.php
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>ログイン後+表示</title> </head> <body> <?php $lifetime = 15; session_start(); setcookie(session_name(),session_id(),time()+$lifetime,"/",$_SERVER["SERVER_NAME"]); session_start(); echo $_SESSION["id"]."<br>"; echo $_SESSION["name"]."<br>"; ?> </body> </html>
こんな感じになるはずです。15秒後、sessionファイルが削除され、エラーを吐きます。
