我对记住我的功能有疑问。
当用户在系统关闭后打开网站时,是否可以保持登录状态。
例如,现在我在登录后正在我的网站上工作,突然系统熄灭了。再次打开我的系统,系统是否保持使用我的用户名登录。
我搜索自己存储了一个记住我在我的系统中存储cookie的功能。但我没有得到任何明确的解决方案。任何人都知道如何为此功能编写代码。你能帮我解决一下这个记住我的功能问题吗
<?php
include("classes.php");
$jeob = new EF_Sql();
$email= $_POST['userid'];
$password= $_POST['password1'];
$papas=base64_encode($password);
$check = $_POST['rememberme'];
$tablename="user_record";
$select_qry = $jeob->SqlQuery("SELECT * FROM ".$jeob->dbprefix.$tablename." WHERE email ='$email' AND password ='$papas' AND active_link='1' ");
if($jeob->SqlRows($select_qry) == "0"){
echo "Invalid Username and Password";
} else {
if($check) {
setcookie("username", $email, time() + 3600); // Sets the cookie username
}
$getuser = $jeob->SqlFetch($select_qry);
$_SESSION['userid'] = $getuser['user_id'];
$_SESSION['oauth_provider'] = "normal";
$_SESSION['email'] = $getuser['email'];
}
?>
以上编码用于我的网站。但即使在浏览器关闭并再次打开网站后,它仍会保持登录状态。但它会在系统关闭后被销毁
答案 0 :(得分:3)
Cookies不关心您的系统是否关闭。
有几件事:
setcookie("username", $email, time() + 3600);
后过期。如果你想让它“持久”,你当然可以将它延长几周(或更长)。但是您的代码存在安全问题,因为只存储自动登录的用户名有点不安全。任何人都可以创建一个带有管理电子邮件地址的“用户名”cookie,并以其身份登录。有时处理remember_me的方法是生成一个“自动登记令牌”,它将是一个随机散列,在数据库中为该用户分配,然后存储在cookie中。这个哈希可以每隔几天就没有用,或者能够阻止严重的旧登录发生或劫持。
答案 1 :(得分:2)
我经常看到人们设置加密的身份验证cookie。如果该cookie在10天内仍然有效,您可以使用它来验证用户身份,即使会话已过期。
答案 2 :(得分:1)
会话/ Cookie
确保,您实际上正在使用cookie。您的代码段显示了一些$_SESSION
内容,但没有提示已使用存储的Cookie。
Cookie expiriation
Cookie只会存储一小时,请参阅time() + 3600
。 3600表示秒,您的cookie有效期多长。也许这就是问题所在。您可以将此时间段花费在特定日期或数周,这很常见。
浏览器设置
此外,您的浏览器可能有一个奇怪的cookie设置,因此它会在关闭时删除所有cookie。也许请与其他浏览器联系。
答案 3 :(得分:1)
Cookie是维护用户会话的最佳解决方案,因为它们存储在浏览器中。每次用户发送HTTP请求时,cookie都会随请求一起发送。 您的应用程序可以通过阅读cookie中的信息来识别用户。
您可以根据需要选择Cookie的年龄。