1

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

$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;

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

这是我第一次保持登录状态,不知道我错过了什么,希望我的解释是彻底的。-麦克风

4

3 回答 3

2

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

2) 检查 setcookie http://php.net/setcookie的手册页

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

于 2012-06-05T10:57:24.627 回答
1

尝试这个:

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

并调用:

$email_and_password = unserialize($_COOKIE['StayLoggedZod']);
于 2012-06-05T10:58:20.617 回答
1

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

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

当 cookie 出现时,会查找用户名和令牌组合:

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

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

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

于 2012-06-05T11:11:46.840 回答