はい、ということで前回の続きです。
チェックボックスで、Cookieを使った自動ログインできるようにしたのと、ログアウトの処理を加えました。
index.php
<?php
require('../common/define.php');
require('../common/function.php');
require('../Connections/DB.php');
//セッションの開始(セッション名:memolog)
session_name('memolog');
session_start();
//cookie用のkeyがDBに入っていてそれが一致したら自動ログイン
if(isset($_COOKIE['mini_auto_login'])){
$sql="
SELECT name FROM mini_users
WHERE
auto='".myesc($_COOKIE['mini_auto_login'])."' ";
$rs = mysql_query($sql,$DB) or die(mysql_error());
$flg = mysql_num_rows($rs);
login_update_info();
}
//postされたときに実行
if($_SERVER['REQUEST_METHOD'] == "POST"){
//nameとpwdがmini_usersに格納されているかチェック
$sql="
SELECT name FROM mini_users
WHERE
name='".myesc($_POST['name'])."' AND
pwd='".sha1(myesc($_POST['pwd']))."'
";
$rs = mysql_query($sql,$DB) or die(mysql_error());
$flg = mysql_num_rows($rs);
login_update_info();
}
//ログインページに移動+情報書き込みの関数
function login_update_info(){
global $DB;
global $flg;
//存在したら
if(isset($flg) && $flg!=""){
//自動ログインにチェックがあったらsession_nameをクッキーに書き込む
if(isset($_POST['auto']) && $_POST['auto']=="1"){
$key=sha1(uniqid(rand(),true));
setcookie('mini_auto_login',$key,time()+3600*24*7);
//update文用
$sql_auto=",auto='".$key."'";
}
//IPとログイン時間を記憶
$sql="
UPDATE mini_users
SET
last_ip='".myesc($_SERVER['REMOTE_ADDR'])."',
last_login='".myesc(date('Y-m-d H:i:s'))."'
".$sql_auto."
";
$rs = mysql_query($sql,$DB) or die(mysql_error());
//セッションIDを変更
session_regenerate_id();
//login.phpに飛ばす
header("location:login.php");
}
}
?>
一部関数化したけど、だいぶ長くなってしまって見づらいな。。あとCookieの中身の文字列がDBに格納してあったら即ログインするようにしてるんだけどこれってやっぱまずいんかな…。でもCookieにユーザ名とかパスワードとか持たせたくないからなぁ。
logout.php
<?php
require('../common/define.php');
require('../common/function.php');
require('../Connections/DB.php');
session_name("memolog");
session_start();
//自動ログインクッキーを削除
if (isset($_COOKIE['mini_auto_login'])) {
//DBからも情報を削除
$sql="
UPDATE mini_users
SET
auto=''
";
$rs = mysql_query($sql,$DB) or die(mysql_error());
setcookie('mini_auto_login', '', time()-42000, '/users/');
}
//セッション変数を全て解除する
$_SESSION = array();
//セッションクッキーを削除
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
//最終的に、セッションを破壊する
session_destroy();
header("Location: ./index.php");
?>