好吧,如果您将用户名和密码存储在cookie中,那么任何有权访问计算机的人都可以访问它们.
这不是很安全.
不,不要这样做.这几乎是最糟糕的方式.
更好的解决方案是:
$token = md5( time() . rand() . $username );这样,当会话到期时,您仍然可以检查cookie中的令牌,将其与存储在数据库中的令牌以及IP地址进行比较,然后为用户处理非交互式登录.
通过这种方式你这样做:
您还应该将时间戳与令牌一起存储,并在30或60天等合理时间段后使其到期,以便用户不会永久登录到他们可能不想登录的计算机.同样,用户可以选择查看所有登录令牌并使其无效,这样他们就可以对自己的帐户安全负责.
回复:@Gumbo的评论:
我觉得你有点模糊rand().即使您知道用户的名字以及他们[通过服务器的时钟]登录的确切秒数,仍然会留下20亿个可能的值rand().[在我的系统上]如果你想开始猜测MD5哈希值是2 ^ 128种可能性,如果你不在与令牌一起存储在数据库中的同一IP地址上,那就完全没有意义了.
由于以下原因,这些项目是从我的头顶选择的:
$username:所以令牌应该是每个用户唯一的.time():所以令牌每秒都是唯一的rand():所以令牌是合理随机的md5():因为我觉得这样.MD5的十六进制字符串易于在代码中使用,在这种情况下,可逆性是一个有争议的问题.我们只对令牌难以猜测感兴趣.使用mt_rand()和sha512或bcrypt或我不在乎什么,但事实仍然是在这种情况下没有必要.
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |