让用户在没有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 */
}

有谁愿意更正或提供建议吗?