Cookie 不会设置为让我保持登录状态..PHP


Cookie will not set for keep me logged in. PHP

试图添加"保持我登录"。不完全确定我做错了什么,但是在选中"保持登录状态"的初始登录时,这将运行:

$email_and_password = array($email_from_html, $pass_from_html);
setcookie("StayLoggedZod", $email_and_password, time()+3600*24*30);

$email_from_html 和 $pass_from_html 是用户的电子邮件和密码被存储到数组中并存储在 cookie 中。

现在,当您离开后返回站点时,初始页面会这样做:

if (isset($_COOKIE['StayLoggedZod'])) 
{
$email_and_password = $_COOKIE['StayLoggedZod'];
$stored_email = $email_and_password[0];
$stored_password = $email_and_password[1];
//USES THE E-MAIL AND PASS STORED IN HERE TO LOG INTO WEBSITE VIA MySQL DB, I EXCLUDED THIS CODE BECAUSE I KNOW THIS PART WORKS.
}
else
{
header("location:login.php");
}

它没有返回任何错误,我无法让它工作,所以我做了一个快速的测试页面,如下所示:

$cookie_data = $_COOKIE['StayLoggedZod'];
$the_email = $cookie_data[0];
$the_pass = $cookie_data[1];
$display_string = "This is my email".$the_email.". This is my password".$the_pass;
echo $display_string;

除了"这是我的电子邮件"等之外,没有显示任何数据。

这是我第一次保持登录状态,不确定我错过了什么,希望我的解释很彻底。-话筒

1)您不应将密码等敏感详细信息存储在cookie中。Cookie 存储在客户端,可编辑且可见

2) 检查手册页中是否有 setcookie http://php.net/setcookie

您将看到第二个参数(要存储的值)应该是字符串(因此,如果要存储数组,请考虑将它们存储为字符串的方法,例如序列化或 JSON 编码)

试试这个:

setcookie("StayLoggedZod", serialize($email_and_password), time()+3600*24*30);

并调用:

$email_and_password = unserialize($_COOKIE['StayLoggedZod']);

持久登录 cookie 的第一条规则是:不要将密码存储在 cookie 中!

相反,生成一个带有用户名和随机令牌的cookie(来自适当的大空间),将此随机令牌存储在用户表中。

当显示 cookie 时,将查找用户名和令牌组合:

  • 如果组合匹配,则用户已登录;生成并保存新令牌,更新 Cookie
  • 如果组合不匹配,则忽略 Cookie

当用户会话因"记住我"cookie而启动时,您应该在他们访问敏感信息(例如个人身份数据)时提示输入密码。

此处概述了处理受损 Cookie 的此过程的改进。