 
			
				05.07.2017, 22:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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']);
       }
     
     
   }
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 01:55
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 "SELECT DISTINCT `id`, `login`, `password`, `avatar` FROM users WHERE token = :tok" - то есть у одного и того же пользователя может быть множество id, login и password? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:17
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.03.2016 
					
					
					
						Сообщений: 429
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 DISTINCT это же означает, выбрать только одного пользователя 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.03.2016 
					
					
					
						Сообщений: 429
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Почему, вы пишите, что у одного и того же пользователя может быть множество id, login и password? 
 
Вообще этого не понимаю 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.03.2016 
					
					
					
						Сообщений: 429
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Я понял, ваше предложение, но если убрать DISTINCT, то ситуация же не изменится? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 02:33
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		DISTINCT это же означает, выбрать только одного пользователя
	 | 
 
	
 
 А зачем это писать, если каждый пользователь уникален. Должен быть уникальным!
 
	
 
	| 
		
			Сообщение от DivMan
			
		
	 | 
 
	| 
		Почему, вы пишите, что у одного и того же пользователя может быть множество id, login и password?
	 | 
 
	
 
 Потому что DISTINCT и fetchAll() предполагает множество, чего ну никак не должно быть!
 
Ваш запрос должен запрашивать пользователя по токену, и если запрос вернул одну запись, значит пользователь есть, а нет, значит нет такого. Если у вас по токену возвращается туева туча пользователей, значит у вас не токены, а лажа. Токен это также обязательно уникальность, и токен привязывается к уникальности пользователя, а не как сбоку случайная припарка.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 10:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.03.2016 
					
					
					
						Сообщений: 429
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Проблема в том, что токен не обновляется только в хроме, в остальных браузерах, всё нормально. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 11:16
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от DivMan
			
		
	 | 
 
	| 
		Проблема в том, что токен не обновляется только в хроме
	 | 
 
	
 
 У вас ничего и не обновляется в браузере, обновление в базе, а проблему нужно искать на клиенте, которая связана с куками.
 
Что касается кода представленного, то это полнейшая муть.    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 11:53
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.03.2016 
					
					
					
						Сообщений: 429
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Почему муть? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 12:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от 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().  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |