繁体   English   中英

保持用户登录时不使用Cookie

[英]Keeping users logged in without cookie

我想知道是否有其他方法可以使用户在重新访问我的网站时保持登录状态,即使会话已过期。

我目前使用基于Cookie的方法,但我想知道人们是否还在使用其他方法。

不,cookie旁边没有[可靠]方法。

还有其他方法,但是您应该避免使用它们,因为它们绝对不像Cookie那样可靠。

  • 您可以使用基于IP的登录系统。 如果使用此功能,您将看到来自同一IP的多个用户的问题。
  • 您可以为唯一生成的用户生成一个特殊链接,并根据该链接进行登录

不必担心以其他方式这样做,您应该致力于使使用Cookie的系统更加安全。

这是一个非常老的问题,但是为了将来的访问者,我想提供一个答案。

应该使用cookie。 就像其他答案指出的那样,它们是目前最可靠的方法。 如果要确保用户未使用过期的cookie进行访问,请使用带有校验和的cookie记录其过期的时间。

这是使用PHP的示例:

$expireTime = time() + (60*60*24*3); // 3 days ( 60 seconds * 60 minutes * 24 hours * 3 days )
$rawPepper = openssl_random_pseudo_bytes(16);
$hexPepper = bin2hex($rawPepper);
setCookie($cookieKey, $cookieValue, $expireTime);
setCookie("expiresWhen", $expireTime, $expireTime);
setCookie("rand", $hexPepper, $expireTime);
$hash_1 =  hash('sha512', "Your_Super_Secret_Salt" . $cookieValue . "Another_Super_Secret_Salt!" . $expireTime);
$hash_2 = hash('sha512', "Yet_Another_Salt!" . $hash_1. $hexPepper);
setCookie("checksum", $hash_2, $expireTime);

然后,在您的另一个PHP表单中进行验证:

$expires = $_COOKIE['expiresWhen'];
$pepper = $_COOKIE['rand'];
$cookieVal = $_COOKIE[$cookieKey];
$givenCheckSum = $_COOKIE['checksum'];

$hash_1 = hash('sha512', "Your_Super_Secret_Salt" . $cookieVal . "Another_Super_Secret_Salt!" . $expires);
$correctCheckSum = hash('sha512', "Yet_Another_Salt!" . $hash_1. $pepper)

if($givenCheckSum != $correctCheckSum){
      /* user's cookie has expired. Handle as you please */
}else{
     /* Cookie is still valid */
}

有人愿意对此做更正或提供建议吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM