2009-12-25 168 views
10

当用户登录时,我得到他/她的ID并将其保存在会话变量中。我想知道的是,这是要走的路吗?或者我应该使用cookie?所以它会自动登录等等。Cookies /会话登录系统

session_start(); 


ifcorrectlogin { 
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id'); 
} 

您如何验证您的用户?

//新手

+0

欢迎StackOverflow上。伟大的第一个问题 – Sampson 2009-12-25 23:58:11

+1

谢谢!准备好更多的问题; P – Erkka 2009-12-26 00:20:56

回答

1

饼干可以很容易被操纵。使用会话管理登录/注销。如果您愿意,可以将用户电子邮件地址/用户名存储在cookie中,并在当前会话过期后下次访问时为其填入用户名框。

+0

第一句话有点矛盾。 PHP在cookie的帮助下维护会话。确保cookie值足够强大。 – BalusC 2009-12-26 00:08:18

+0

Balus,我想我明白我的答案可能会有些混乱。阅读完你的内容后,我认为我们已经提供了相同的解决方案。 – Sampson 2009-12-26 00:14:51

1

我会试着找到一个会话引擎,所以你不必处理misc。安全问题,如果你犯了一些错误,那就咬你的屁股。我使用的是内置会话引擎的django。我并不知道该领域的其他产品,尽管我认为大多数框架都有。

他们在django做的方式是在用户的Cookie中放置一个加密哈希,每次页面查看都会更新,并将所有其他会话信息保存在服务器上的数据库中,以防止用户篡改和安全问题。

5

是的,这是要走的路。该会议本身已经由一个cookie支持,以消除您的任何编程工作。只要用户打开浏览器实例或者直到会话在服务器端超时,会话(实际上是cookie)就会存在,因为用户在某段时间(通常大约30分钟)内未访问该网站。

登录时,只需将获得的User置于$_SESSION。在受限制页面上的每个请求上,您只需检查登录的User是否在$_SESSION中可用,并相应地处理请求,即继续处理请求或重定向到登录或错误页面。在注销时,请从$_SESSION中删除User

如果你想添加一个在这台电脑上记住我选项,那么你需要自己添加另一个cookie,它的寿命比会话长。您只需确保为cookie生成一个长期,唯一且难以猜测的值,否则它很容易被破解。看看PHP如何通过在网页浏览器中使用名称phpsessionid来检查cookie。

+0

所以如果我明白如果用户想要被“记住”正确,我应该存储一个独特的字符串在一个cookie和分贝,当用户再次访问我检查如果存在的cookie,如果它确实存在我比较它与一个在db? – Erkka 2009-12-26 00:26:34

+1

差不多。当一个**未登录的用户访问时,然后检查DB关联的用户,然后“自动”登录。我发布了一个答案,其中涵盖了这一点,你可能会觉得它有用以及:http://stackoverflow.com/questions/1877242/keep-user-logged-in-when-he-visit-the-same-page-again/1877304#1877304 – BalusC 2009-12-26 00:34:33

0

由于BalusC提到,session_在php的功能是要走的路,你的基本想法是健全的。但是仍然有许多不同的实现,其中一些有其陷阱。 例如,如Jonathan Samson所解释的,使用cookie可能会导致安全漏洞。

我的PHP是一个有点生疏,但我记得session_ -functions也可以使用URL中的编码会话ID。 (还有有这个自动添加到所有本地链接(如GET)和形式的目标(如POST)的选项。但是,这也不是没有风险的,无论是。),以防止会话劫持复制SID为的一种方式记住IP地址并将其与任何带有有效会话ID的请求进行比较,以将其与发送此请求的IP进行比较。

正如你所看到的,底层的方法仅仅是个开始,还有更多的事情要考虑。因此,需要考虑SapphireSun的建议:通过使用经过良好测试的库,您可以获得高级别的安全性,而无需花费宝贵的开发时间来开发自己的会话系统。我会推荐这种方法适用于任何想要在现实世界中部署的系统。

OTOH,如果你想了解PHP会话和安全问题,你一定要自己做,如果只是为了了解做;-)