@IvanKalinin

Как решить проблема с Cookie в PHP

Суть проблемы заключается в том, что в файле, условно, login записываются куки:

setcookie("id", $id, time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);


По после перенаправления на страницу check.php $_COOKIE['id'] и $_COOKIE['hash'] пусты
isset говорит что они в принципе отсутствуют, тем не менее их из фф можно просмотреть.

В чем может быть проблема?
  • Вопрос задан
  • 3989 просмотров
Пригласить эксперта
Ответы на вопрос 7
@kaasius
Выше уже написали - используйте параметр path функции setcookie.

Совет - заверните это куда-нибудь (можно в функцию, а лучше в класс), один раз все отдебажте, и забудьте, как страшный сон.
Ответ написан
Комментировать
Вы уверены что правильно их устанавливаете?
Куки должны устанавливается до любых других хеадеров, то есть в самом начале вашего скрипта login
Ответ написан
@cold_brain
Там ведь есть еще параметер path в котором задается директория в пределах которой будет видна кука, если ее не задавать то значением будет являться текущая директория и попробуйте проверить куки до перенаправления на login.
Ответ написан
@IvanKalinin Автор вопроса
login

<?php

//генерация случайной строки
function generateRandomSrt($length=6){
	$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	$randomStr = "";
	$nSymb = strlen($chars)-1;
	while (strlen($randomStr) < $length){
		$randomStr .=$chars[mt_rand(0,$nSymb)];
	}
	return $code;
}
//если есть куки с ошибкой - вывод их в переменную
if (isset($_COOKIE['errors'])){
	$errors = $_COOKIE['errors'];
	setcookie('errors', '', time() - 60*24*30*12, '/');
	}

//Подключаем конфиг
include ('reg_config.php');
include ('config.php');

if (isset($_POST['submit'])){
	//вытаскиваем пользователя с таким логином (email);
	$query = mysql_query("SELECT id, password, salt FROM `".$dbtablename."` WHERE `email`='".mysql_real_escape_string($_POST['email'])."' LIMIT 1");
	$data = mysql_fetch_assoc($query);
	//сравнение паролей
	if ($data['password'] === md5(md5($_POST['password']).$data['salt'])){
		//генерация случайного числа и его шифрование
		$hash = md5(generateRandomSrt(10));

		//запись в БД хеша
		mysql_query("UPDATE ".$dbtablename." SET user_hash='".$hash."' WHERE id='".$data['id']."'") or die ("Ошибка авторизации. Код 6");
		//добавляем куки
		setcookie("id", $data['id'], time()+60*60*24*30);
		setcookie("hash", $hash, time()+60*60*24*30);
		echo $_COOKIE['id'];
		//отправляем на страницу проверки скрипта
		
		echo "<meta http-equiv=refresh content=\"5; url=".$path."\">";
		exit();
		} else {
			echo "Неверный логин/пароль";
	
			}
	}
?>


<?php
	if (isset($errors)){
		print '<h4>'.$error[$errors].'</h4>';
		}
?>
Ответ написан
Возможно login.php и check.php у вас на разных доменах/поддоменах/протоколах(http/https)?
Ответ написан
Комментировать
Посмотрите в другом браузере - у FF особая политика в отношении кук.
Ответ написан
Комментировать
@IvanKalinin Автор вопроса
Для тех кто не читает комменты в ответах - спасибо cold_brain. Правильный ответ
setcookie("id", $data['id'], time()+60*60*24*30, '/');
setcookie("hash", $hash, time()+60*60*24*30, '/');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы