2011-06-11 41 views
0

我该如何正确编写一个脚本来设置cookie来记住用户的用户名和密码,方法是在登录表单上选中一个复选框?还记得我JavaScript吗?

此外,如果这可以在PHP中完成,请让我知道。

+1

也许记住用户名,但不是密码。您不需要将密码存储在服务器上的用户表中的任何位置,即使此时需要使用强大的哈希算法(最小值,sha1)对其进行哈希处理。 – 2011-06-11 22:50:54

回答

0

在PHP中,通过使用set_cookie将适当的值从$_SESSION复制到$_COOKIE来为会话信息(用户名,密码)设置一个cookie。当用户访问一个页面时,首先检查是否存在$_SESSION变量,然后是$_COOKIE变量。如果存在$_COOKIE变量但$_SESSION变量不存在,请将$_COOKIE复制到$_SESSION。 (也就是说,如果用户选中该框)。

+0

你当然是指'set_cookie',因为'$ _COOKIE'不是魔术。 – 2011-06-11 22:51:02

+0

是的,当然这就是我的意思......混淆了。 – Ryan 2011-06-11 22:51:53

+1

如果有会话设置,cookie应该做的唯一事情就是指向一个可以重新初始化的已保存(在数据库中)会话。我不同意客户需要保存在cookie中的用户名和密码。会议不需要保存在其中的密码,IMO。 – 2011-06-11 22:53:42

0

您可以按照上面提到的@minitech进行操作。然而,将密码信息存储在cookie中并不是一个好主意。它可以很容易地从电脑中提取。

您最好生成一次性散列,可以用来登录一次并将其存储在cookie中。一旦其使用无效。虽然它不是完全安全的(无论如何,尽可能安全地使用会话,如果您希望它更安全,可以使用https),但不会影响用户密码。

用户经常在多个站点上使用相同的密码。如果它在一个网站上受到损害,则更容易进入其他网站上的用户帐户。

2

存储密码记忆东西的最佳方法是将md5哈希与一些浏览器特定数据一起存储。例如,你存储一个字符串,如

username-4155b1b6e53ad73e06c4c58e709cdeea19915ea84de517500d9ba3280e27cf59 

例如,你可以生成这个字符串在PHP这样

$string=$username.'-'.md5(substr($http_user_agent, 5, 10)) .md5($password).md5(substr($http_user_agent, 0, 10)); 

我们的目标是使我们的字符串足够复杂。在登录阶段,我们使用只有我们知道的方法来提取密码md5。

$somearray=explode('-', $string); 
$username=$somearray[0]; 
$passwordmd5=str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string)); 

,现在,我们可以做我们的数据库这样的比较,

select * from users where username='$username' and md5(password)='$passwordmd5'; 

HTTP用户代理的东西消除了一下cookie字符串的未经授权使用的风险。虽然未经授权的人偷走了cookie,但是他不能在另一个浏览器中使用它。如果我们没有这样做,那么具有相同字符串的人可能表现得好像他拥有密码并且可以作为我们的真实用户登录。

0
$somearray = explode('-', $string); 
$username = $somearray[0]; 
$passwordmd5 = str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string));