2013-03-29 41 views
0

我一直在阅读有关登录,存储密码和用户名的信息。 在cookie中存储密码是BIG NO。 所以我选择只在cookie中存储用户名,这很好,我猜。我将它存储到cookie中,以便我可以轻松访问它并处理“记住我”选项。 但是,如果我想通过SELECT * FROM databse WHERE username='$_COOKIE[]' AND password=''用PHP识别登录的用户

来识别用户,我在考虑SESSION。我可以在会话中存储密码,不安全但很好。但问题是当用户关闭浏览器并重新打开它时。他们会保持登录状态,但会话将会消失,所以每次我都要检查是否有SESSION [pass]设置,如果没有,请从数据库中选择并设置它。

这是我的解决方案,任何人都可以建议我也许更充分的解决方案?

事实是,没有超安全的系统,如果有人真的想闯入他们会成功。

+0

[SQL-Injeciton(http://en.wikipedia.org/wiki/SQL_injection)...或者其他的东西。说真的,[永远不要这样做](http://bobby-tables.com/)。 – Bobby

+0

千万不要在cookie中保存密码 – Arvind

+0

用户名是唯一的,但有人可以使用用户名操作cookie以获取来自另一用户的信息 – FosAvance

回答

3

你可以有一个叫remember_tokens表的结构是这样的:

id   |   user_id    |  created 
------------------------------------------------------------------------ 
f129ea9c  |   1     |  2-3-2013 12:31:51 
e9ac8aa0  |   2     |  2-4-2013 08:21:13 

id有一些独特的ID,如UUID或随机生成的字符串。 user_id是要记住的用户的ID。 created是创建记录时(因此可以在X时间后注销用户)。

现在,如果用户成功登录并希望被记住,则添加一条新记录,其中包含唯一的id和他的user_idremember_tokens。您还可以使用setcookie()创建一个新的cookie,该cookie将包含刚刚插入的随机生成的id

现在,当用户下次请求该站点时,您会看到他已存储了remember Cookie。您获取该记录,检查该记录是否尚未过期,并使用user_id列登录相应的用户。这样,您就不会在Cookie中存储敏感信息。

希望这有助于

+0

这很棒。但是,我可以使用该cookie从数据库中获取用户的ID或用户名吗? 由于我需要某处的用户ID或他的用户名或其他来自表“用户”的信息 – FosAvance

+1

该表存储他的ID('user_id'),并且cookie存储'remember_token'的ID。你可以做一个简单的SELECT来获得他的ID。如果你不知道如何做到这一点,我会在阅读一些优秀的文献之前重新考虑继续发展。 – vanneto

+0

哦,是的,对不起,我错过了'user_id'字段 – FosAvance