会话和Cookie

5
我目前有一个网站,让我的访客可以通过我拼凑和编写的简单脚本登录。目前我只使用会话来保持访客的登录状态。添加cookie以存储用户登录状态对我的网站有什么优势吗?还是说有更好的方法?使用PHP。

我认为没有其他办法......如果你想要存储用户登录状态,你必须使用cookies。 - Cristian
@Cristian:不……你不必须这样做,但另一种解决方案非常丑陋。(通过URL传递) - mpen
3个回答

4
如果您正在使用PHP会话,则必须使用cookies。PHP将会话ID存储在cookie中,并将会话数据存储到Web服务器上的磁盘文件中。

3

@Ramiro Gonzalez Maciel说他已经制作了那个脚本,他不需要框架作为示例。通常,框架会将脚本包装和放置好。

回答那个问题:

我通常在cookie中存储一些md5字符串,这些字符串来自于md5(password)和他的用户名的组合,这样我就知道下一次他进入我的网站时已经登录了,所以我不需要让他再次登录。

我的示例:

<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    // sql and escape stuff witch will return 1 if he has entered a valid login
    if($sqlreturn == 1){
       // do login
       $wraplogin = md5($username."-".md5($password)."-".SECRET_KEY); // I always define a define('SECRET_KEY', 'mysecretkey'); in global file.
       // now you can store that $wraplogin in cookies and remember his login. Next time he enters the website, you read that cookie, compare it with what you have in your database and let him in.
    }
?>

现在我知道这不是最好的例子,但我个人在非常大的网站(>500.000用户)中使用过它,但还没有被黑客攻击 :)

这就是使用cookie进行登录部分的优势。

祝你好运。


有必要将密码放入md5哈希中吗?我认为另一个随机数据比如用户注册时间戳会更好。我知道这么长的字符串不可能被暴力破解,但是为了保险起见还是这样做比较好。顺便说一下,从我所了解到的情况来看,cookie的优点在于可以设置它们让用户保持登录状态XX天。 - Derek
是的,主要可以在登录cookie中设置任何内容,例如用户IP等。我已经添加了密码,使该字符串更加复杂,但是像我说的那样,您可以放置任何内容 :) 任何稍后可以验证的内容。 - Mihai Iorga

1

Web框架(Java Servlets和其他框架)通常使用cookie来识别会话;另一个常见的选项是URL参数。因此,假设您正在使用任何Web框架,它可能已经使用cookie存储会话ID。Web框架将使用此ID在每个请求中标识会话对象。尽管cookie可以在服务器重新启动后保留,因为它们存储在浏览器中,但除非您配置了会话持久性,否则会话对象通常不会保留。

如果您希望用户像许多网站实现的常规“记住我”选项一样“自动登录”,则需要持久化会话对象(如果您的框架提供)。或者实施类似的系统,使用cookie存储“已登录令牌”,并在用户访问系统以自动登录或将其发送到登录页面时检查该令牌。(编辑:就像Mihai在其他答案中提出的那样)

如果您想要实现自己的方法,我建议检查流行的Web框架如何实现这一点,特别是存储用户数据的安全和隐私方面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接