Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2017, 22:50
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Обновление токена
Кто сталкивался, с подобной ситуацией?

На сайте сделал автоматический вход, если был закрыт браузер.

Проблема в том, что, при входе, токен перезаписывается в мозиле и в опере, а в хроме, не перезаписывается, почему так?

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']);
       }
     
     
   }
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2017, 01:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

"SELECT DISTINCT `id`, `login`, `password`, `avatar` FROM users WHERE token = :tok" - то есть у одного и того же пользователя может быть множество id, login и password?
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2017, 22:17
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

DISTINCT это же означает, выбрать только одного пользователя
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2017, 22:22
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Почему, вы пишите, что у одного и того же пользователя может быть множество id, login и password?

Вообще этого не понимаю
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2017, 22:26
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Я понял, ваше предложение, но если убрать DISTINCT, то ситуация же не изменится?
Ответить с цитированием
  #6 (permalink)  
Старый 07.07.2017, 02:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от laimas
DISTINCT это же означает, выбрать только одного пользователя
А зачем это писать, если каждый пользователь уникален. Должен быть уникальным!

Сообщение от DivMan
Почему, вы пишите, что у одного и того же пользователя может быть множество id, login и password?
Потому что DISTINCT и fetchAll() предполагает множество, чего ну никак не должно быть!

Ваш запрос должен запрашивать пользователя по токену, и если запрос вернул одну запись, значит пользователь есть, а нет, значит нет такого. Если у вас по токену возвращается туева туча пользователей, значит у вас не токены, а лажа. Токен это также обязательно уникальность, и токен привязывается к уникальности пользователя, а не как сбоку случайная припарка.
Ответить с цитированием
  #7 (permalink)  
Старый 07.07.2017, 10:30
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Проблема в том, что токен не обновляется только в хроме, в остальных браузерах, всё нормально.
Ответить с цитированием
  #8 (permalink)  
Старый 07.07.2017, 11:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от DivMan
Проблема в том, что токен не обновляется только в хроме
У вас ничего и не обновляется в браузере, обновление в базе, а проблему нужно искать на клиенте, которая связана с куками.

Что касается кода представленного, то это полнейшая муть.
Ответить с цитированием
  #9 (permalink)  
Старый 07.07.2017, 11:53
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Почему муть?
Ответить с цитированием
  #10 (permalink)  
Старый 07.07.2017, 12:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от DivMan Посмотреть сообщение
Почему муть?
Потому что DISTINCT и fetchAll(). Должно быть

if($userArray = $queryUser->fetch(PDO::FETCH_ASSOC)) {
.... есть изер
} иначе нет

и никаких DISTINCT, в противном случае у вас близнецы в базе.

$queryUser->setFetchMode(PDO::FETCH_ASSOC) - это не обязательно. Установите сразу в настройках подключения предпочтительный режим
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
если им пользуетесь, и более нигде упоминать не придется, а если индивидуально для разбора какого либо запроса потребуется иной, то его можно указать и в fetch().
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление картинки по таймеру paveltkachev Events/DOM/Window 25 05.09.2016 15:27
Обновление двух iframe на одной странице ultrahomie Общие вопросы Javascript 2 19.05.2015 17:04
обновление iframe с помощью AJAX Aglenn AJAX и COMET 4 02.09.2011 22:48
Обновление страницы AndreyS AJAX и COMET 6 16.05.2011 15:55
Цикличное обновление страницы Roman_kstu Общие вопросы Javascript 7 29.05.2008 05:55