我正在建立一个论坛,我不确定设置cookie的最佳做法。
以下是我在用户注册网站时构建的cookie:
setCookie($name,$ip,time()+300000,"/");
而不是:time()+ 300000。我希望cookie永远存在,但我不知道该怎么做。
另外,我对安全性有疑问。如何检查cookie是否被黑客篡改或设置?
另一个问题是,如何检查用户是否允许在浏览器上使用Cookie?
更新:
一旦登录验证有效,我就把它放进去: setCookie方法($名称,$ IP,时间()+ 60 * 60 * 24 * 365, “/”);
更新:
if(!isset($_COOKIE['$name'])
{
$salt="androidprogrammer26@yahoo.com";
$hash = SHA2(salt + $_POST['pass']);
setCookie($name,$hash,time()+60*60*24*365*50,"/");
}
答案 0 :(得分:2)
持续时间,只需使用足够大的数字而不是300000
。
time() + 60 * 60 * 24 * 366 * 15
给你15年。
为防止篡改,请使用安全散列函数(如SHA-2),在服务器上存储机密salt
(例如256位随机字符串),计算hash = SHA2(salt + data)
并设置一个包含hash
的Cookie。
现在,当您阅读Cookie时,您所要做的就是验证hash
是否具有正确的值。
答案 1 :(得分:1)
您可以不永久设置Cookie,但您可以将其设置很长时间,并在用户访问您的网站时随时刷新它。
到第二部分:在数据库中另外保存cookie值,如果它们匹配则设置它,如果没有人试图操纵某些东西。
另一种选择是您只在cookie中存储标识符并在数据库中存储值。但要小心,确保没有人可以猜出这些标识符。
Btw:我不认为用户的IP必须永远存储在他的cookie中,因为大多数人每天都需要一个新的永久性cookie :-D更新:
使用用户ip进行识别并不好,它每天都在变化。
像这样做:
为数据库中的每个用户保存一个salt。像"jfdklsjfdsohfdsughfdjkhg"
一样随机生成。如果用户使用值"LoggedIn"
保存cookie md5($username.$salt)
,则保存用户ID。如果您阅读了cookie,您只需要将哈希与md5(databaseName.databaseHash).
进行比较。如果它相等,那么cookie就是好的。你必须确保盐在这个系统中得到很好的保护(只有你的系统应该知道它)。
if(isset($_COOKIE["LoggedIn"))
{
$userid = $_COOKIE["UserId"] // Second cookie, not hashed to know the user's id
//get Values from Database here => $database_name, $database_salt
if(md5($database_name.$database_salt) == $_COOKIE["LoggedIn"])
{
//OK
}
}
答案 2 :(得分:1)
Cookies是这样的。他们可以被任何人改变。您可以使用Sessions更安全,或在每次使用时检查Cookie值,以确保它们不会更改。
你也可以加密它们,但是cookie有字符限制,加密会使它变大,所以它不是一个很好的解决方案。
关于“永久性的cookies”,您可以设置50年到期。
答案 3 :(得分:0)
您无法永久设置Cookie。您可以为cookie设置一个长期到期日。 请将数据保存在数据库或会话中并尝试匹配它们。建议使用会话而不是使用cookie,不能修改会话数据。