※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Sessionについて記述していきたいと思います。6月8日記事
ログインしたページを回っている時に、別のページにいっても、また別のページにいっても、個人の情報がついてまわるときありますよね?その部分をどう実装しているのかというお題です。これには2つの方法がありSession管理とクッキーというものがあります。今回は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ファイルが削除され、エラーを吐きます。

添付ファイル