Ведение пользователей без файлов cookie - PullRequest
0 голосов
/ 28 ноября 2011

Мне было интересно, есть ли какой-либо другой способ сохранить пользователей вошедшими в систему при повторном посещении моего веб-сайта, даже если сеанс истек.

В настоящее время я использую метод на основе файлов cookie, но мне было интересно, существуют ли другие методы, которые используют люди.

Ответы [ 3 ]

4 голосов
/ 28 ноября 2011

Нет, кроме куки нет [надежных] методов.

2 голосов
/ 28 ноября 2011

Существуют и другие методы, но вы должны воздерживаться от их использования, поскольку они ни в коем случае не являются такими же надежными, как файлы cookie.

  • Вы можете использовать систему входа в систему на основе IP. При использовании этого вы увидите проблемы с несколькими пользователями с одного IP.
  • Вы можете создать специальную ссылку для пользователей, которая генерируется уникальным образом, и создать логин на основе этого

Вместо того, чтобы беспокоиться о том, чтобы сделать это по-другому, вам следует поработать над тем, чтобы сделать вашу систему, использующую файлы cookie, более безопасной.

1 голос
/ 21 сентября 2014

Это очень старый вопрос, но ради будущих посетителей я хотел бы дать ответ.

Вы ДОЛЖНЫ использовать куки.Как и другие ответы, они являются наиболее надежным методом.Если вы хотите убедиться, что пользователь не посещает файл 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 */
}

Кто-нибудь хочет внести исправления в это или предоставить предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...