2014-01-19 48 views
2

在阅读this和所有相关的问题后,我仍然有一个问题。
我试图用“记住我”功能来实现登录表单。早些时候,我一直在使用一个cookie(只包含一个哈希用户名,没有密码)来验证用户是否已经登录,但我读过这不太安全,因此我决定只使用会话。
在开始的时候一切正常需要:PHP:一种安全的方式来保持登录信息

$expires=isset($_POST['rememberMe'])? time()+(60*60*24*14): 0; 
session_set_cookie_params($expires, "/", ".example.com", false, true); 
session_start(); 

但我希望他们能如果“记住我”设置为直接打开页面(如http://example.com/blog)。很明显,我做了一个session_start()并重定向到登录页面,如果用户没有登录。但是,在这一点上,我不能正确地做session_set_cookie_params(),因为我不知道他/她是否早先设置了“记住我”或不。如果我仍然把它放入cookie中,它会安全吗?或者我应该修改我的数据库来做到这一点?
还有一件事:安全会话数据(没有密码,再次!),如用户名,权限等两周?

回答

1

如果您在数据库中正确存储了一个随机生成的密钥,我看不到这是不安全的。

您应该生成一个随机密钥,将其存储在您的数据库中,然后注册一个cookie。当用户请求时,他会将该cookie发送给您,这将验证数据库中的密钥,并在没有问题的情况下提供访问权限。

请记住,会话的基本机制实际上使用cookie。如果您认为“记住我”计划不安全,您的整个会话系统就有缺陷,您的会话cookie也存在窃取您的“记住我”cookie的危险。

+0

所以你认为在cookie中存储哈希用户名是安全的,对吗? –

+0

我编辑了系统的简要说明。只有散列用户名是非常糟糕的,因为散列总是相同的。你应该生成一个随机密钥。 – xrash