Обновление токена
Кто сталкивался, с подобной ситуацией?
На сайте сделал автоматический вход, если был закрыт браузер. Проблема в том, что, при входе, токен перезаписывается в мозиле и в опере, а в хроме, не перезаписывается, почему так? function authCookie() { $sql = "SELECT DISTINCT `id`, `login`, `password`, `avatar` FROM users WHERE token = :tok"; $queryUser = $this->db->prepare($sql); $queryUser ->bindValue(':tok', trim($_COOKIE['user']), PDO::PARAM_STR); $queryUser->execute(); $queryUser->setFetchMode(PDO::FETCH_ASSOC); $userArray = $queryUser->fetchAll(); if(!empty($userArray[0]['login'])) { $userLogin = $userArray[0]['login']; $userId = $userArray[0]['id']; $userAvatar = $userArray[0]['avatar']; $salt = 'szdfsdfgg'; $tokenstr = strval(date('s')) . $salt; $token = md5($tokenstr); $sql = "UPDATE users SET token ='" . $token . "' WHERE login = :log2"; $queryToket = $this->db->prepare($sql); $queryToket->bindValue(':log2', trim($userLogin), PDO::PARAM_STR); $queryToket->execute(); $_SESSION['token'] = $token; $_SESSION['user'] = $userLogin; $_SESSION['id'] = $userId; $_SESSION['avatar'] = $userAvatar; output_add_rewrite_var('token', $token); header('Location: ./index.php?token='.$_SESSION['token']); } } |
"SELECT DISTINCT `id`, `login`, `password`, `avatar` FROM users WHERE token = :tok" - то есть у одного и того же пользователя может быть множество id, login и password?
|
DISTINCT это же означает, выбрать только одного пользователя
|
Почему, вы пишите, что у одного и того же пользователя может быть множество id, login и password?
Вообще этого не понимаю |
Я понял, ваше предложение, но если убрать DISTINCT, то ситуация же не изменится?
|
Цитата:
Цитата:
Ваш запрос должен запрашивать пользователя по токену, и если запрос вернул одну запись, значит пользователь есть, а нет, значит нет такого. Если у вас по токену возвращается туева туча пользователей, значит у вас не токены, а лажа. Токен это также обязательно уникальность, и токен привязывается к уникальности пользователя, а не как сбоку случайная припарка. |
Проблема в том, что токен не обновляется только в хроме, в остальных браузерах, всё нормально.
|
Цитата:
Что касается кода представленного, то это полнейшая муть. :) |
Почему муть?
|
Цитата:
if($userArray = $queryUser->fetch(PDO::FETCH_ASSOC)) { .... есть изер } иначе нет и никаких DISTINCT, в противном случае у вас близнецы в базе. $queryUser->setFetchMode(PDO::FETCH_ASSOC) - это не обязательно. Установите сразу в настройках подключения предпочтительный режим PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC если им пользуетесь, и более нигде упоминать не придется, а если индивидуально для разбора какого либо запроса потребуется иной, то его можно указать и в fetch(). |
Часовой пояс GMT +3, время: 14:27. |