Php 让用户在没有cookie的情况下登录

Php 让用户在没有cookie的情况下登录,php,session,cookies,login,Php,Session,Cookies,Login,我想知道,即使会话已过期,当用户再次访问我的网站时,是否还有其他方法让他们保持登录 我目前使用的是一种基于cookie的方法,但我想知道人们是否也在使用其他方法。不,除了cookie之外,没有[可靠的]方法 不,除了cookie之外,没有[可靠的]方法 还有其他方法,但是你应该避免使用它们,因为它们根本不像cookies那样可靠 您可以使用基于IP的登录系统。如果使用此选项,您将看到来自同一IP的多个用户出现问题。 您可以为唯一生成的用户生成特殊链接,并基于该链接进行登录 与其担心用另一种方法来

我想知道,即使会话已过期,当用户再次访问我的网站时,是否还有其他方法让他们保持登录


我目前使用的是一种基于cookie的方法,但我想知道人们是否也在使用其他方法。

不,除了cookie之外,没有[可靠的]方法

不,除了cookie之外,没有[可靠的]方法

还有其他方法,但是你应该避免使用它们,因为它们根本不像cookies那样可靠

您可以使用基于IP的登录系统。如果使用此选项,您将看到来自同一IP的多个用户出现问题。 您可以为唯一生成的用户生成特殊链接,并基于该链接进行登录
与其担心用另一种方法来做,不如让你的cookie使用系统更安全。

还有其他方法,但你应该避免使用它们,因为它们没有cookie可靠

您可以使用基于IP的登录系统。如果使用此选项,您将看到来自同一IP的多个用户出现问题。 您可以为唯一生成的用户生成特殊链接,并基于该链接进行登录
与其担心用另一种方式来做,不如让你的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 */
}

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

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

你应该用饼干。正如其他答案所指出的,它们是最可靠的方法。如果要确保用户访问时没有使用过期的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 */
}

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

请参阅我同意这一点:@YourCommonSense如果禁用cookie,我可以使用额外的HTTP头来存储某种令牌吗?基本上模仿cookie。我同意这一点:@YourCommonSense如果禁用cookie,我可以使用额外的HTTP头来存储某种令牌吗?基本上模仿饼干。