私はPHPセッションを使用したPHP登録/ログインシステムを持っていますが、これは完全に機能しています。ユーザーが私を覚えていることを確認して、永久に、または少なくとも1週間ほどログインしたままにしておくことができます。
クッキーを保存して確認する必要があると思いますが、実際にクッキーに何を保存する必要があるのか混乱しました。ユーザーIDまたはユーザー名を保存すると、誰かが偽のCookieを使用して別のユーザーのデータを調べることはできませんか?
どんな前倒しでも大歓迎です。
あなたがする必要があるのは、PHPセッションCookieを拡張することだけです。次の例では、Cookieを30日延長します。
$params = session_get_cookie_params();
setcookie(session_name(), $_COOKIE[session_name()], time() + 60*60*24*30, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
あなたのセキュリティの質問から、あなたは簡単にハッキングされる可能性のある値を置くことだけを心配していると思います。PHPセッションCookieにはランダムな値があり、その内容がファイルシステムに保存されるため、問題はありません。
ログインに成功したら、次の手順を実行します。
$_SESSION['user_is_loggedin'] = 1;
$cookiehash = md5(sha1(username . user_ip));
setcookie("uname",$cookiehash,time()+3600*24*365,'/','.yoursite.com');
SQLに保存:
$sql = "UPDATE `users` SET `login_session`='$cookiehash' WHERE `user_id`='$uid'";
ユーザーがログインしているかどうかを確認するには:
function CheckCookieLogin() {
$uname = $_COOKIE['uname'];
if (!empty($uname)) {
$sql = "SELECT * FROM `users` WHERE `login_session`='$uname'";
$_SESSION['user_is_loggedin'] = 1;
$_SESSION['cookie'] = $uname;
// reset expiry date
setcookie("uname",$uname,time()+3600*24*365,'/','.yoursite.com');
}
}
if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
CheckCookieLogin();
}
私がよく使う小さな例
function setSession($username,$password,$cookie=null){
// Other code for login ($_POST[]....)
// $row is result of your sql query
$values = array($username,$this->obscure($password),$row['id']);
$session = implode(",",$values);
// check if cookie is enable for login
if($cookie=='on'){
setcookie("your_cookie_name", $session, time()+60*60*24*100,'/');
} else {
$_SESSION["your_session_name"] = $session;
}
}