如何使用PHP创建安全的“记住我”系统?

时间:2010-09-05 07:29:39

标签: php authentication cookies remember-me

我有一个登录系统。如何使用cookie实现安全的记住我系统。

我应该在cookie用户名和密码中保存多少值,但我如何保护它?

4 个答案:

答案 0 :(得分:1)

在db中定义一个Salt foreach用户

设置

$expire_time = time() + 2 * 7 * 24 * 3600; // 2 weeks exp time

setcookie( 
    "rememberMe",
    crypt($username, $salt),
    $expire_time,
    '/'
);

验证

$_COOKIE['rememberMe'] === crypt($username, $salt)

答案 1 :(得分:0)

也许你可以创建一个16字母的字母/数字字符串,它在数据库中与该用户和mac地址相关联,这样(只要人们不会太努力和欺骗mac),只有该机器可以登录

答案 2 :(得分:0)

也许您应该存储(在您的数据库中)访客IP,用户代理,时区或已安装的插件。使用Javascript可能很容易获得的东西,因为获取MAC地址可能是个问题。

然后,您可以轻松检查用户是否具有与上次相同的IP,UA,时区或插件:)或者您可以使用MaxMind检查其位置并确认他是否使用了正确的时区。如果有任何可疑之处,您应该丢弃cookie凭证。

答案 3 :(得分:-1)

没有多少...不要让你的会话文件被清理(ini设置session.gc_probability = 0),并将会话cookie从临时更改为永久(ini setting session.cookie_lifetime = however_long_you_want_the_user_to_be_remembered)。

当然,您可能希望最终清理过时的会话文件,因此您可以尝试非常清除概率的低概率,或进行一些外部清理。无论哪种方式,只要用户保持会话cookie并保持会话文件,他们就会被“记住”。

相关问题