Каков наилучший способ аутентификации, который использует только cookie? - PullRequest
1 голос
/ 20 мая 2011

Есть несколько способов, которые я рассматриваю.
1. используя пользователя PK, значение cookie: {id}:{md5(id+salt)}
2. используя электронную почту пользователя, значение cookie: {email}:{md5(email+salt)}
3. способ 1 или 2 плюс пароль, например {id}:{md5(id+pass+salt)}, но при этом способе БД будет выбираться каждый раз (select the password).

Есть ли другой хороший способ проверки подлинности на основе файлов cookie?

1 Ответ

0 голосов
/ 20 мая 2011

То, что вы действительно хотите, это:

  id:[some_int],
  session_token:[some_hash]

Маркер сеанса создается только на сервере и является просто ключом поиска ... важно, в сочетании с user_id.Он хранится в базе данных с датой истечения срока действия.По истечении этого срока вам потребуется новый логин.Вы можете установить время ожидания в любое время ... изменить способ генерации ключей и т. Д. Вы также можете использовать различные классификации токенов аутентификации с разными таймаутами и т. Д.

При загрузке страницы вы используете идентификатори токен сеанса в виде запросов к таблице сеансов, обычно с выбором ярости даты (в зависимости от бизнес-правил входа в систему).Если все совпадает, ты в порядке.Для дополнительной запутанности вы можете использовать часть пользовательского агента.

То, как вы генерируете токен, не имеет значения в этом случае ... MD5 (mktime ()) так же хорош, как и все остальное.

Единственное время, когда вам нужно беспокоиться о готовых форматах, - это auth_tokens, которые можно использовать для преодоления разрыва API между приложениями и вашим веб-сервисом (не похоже, что вам нужно беспокоиться об этом).*


Пример поток обнаружения входа в систему:

<?php
   session_start();
   if (array_key_exists('auth_user', $_SESSION))
   {
       // user already has a session.
   }
   elseif (array_key_exists('session_token', $_COOKIE))
   {
       $sql = 'SELECT * 
               FROM sessions
               LEFT JOIN users USING (user_id)
               WHERE sessions.user_id = %d
                 AND sessions.token = \'%s\'
                 AND [ some date argument ]
               LIMIT 1';
       // execute SQL.  If you get a user back, great.  Set up a session.
       if (!empty($user))
       {
           $_SESSION['auth_user'] = $user;
       }
   }
   else
   {
      // Not logged in.  Do what you want here (like show a login UI).
   }

Ваш код авторизации должен создать токен, поместить его в БД и установить cookie.

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