Установка cookie в запросе AJAX?
Я проверяю форму входа в систему с помощью вызова jQuery AJAX на PHP. В php я создаю сеанс, и если они установили флажок "Запомнить меня", я хочу создать файл cookie. Вот код php:
<?php
include '../includes/connection.php';
date_default_timezone_set('GMT');
$name = $_POST['username'];
$pass = $_POST['password'];
$query = mysql_query("SELECT id, username, password FROM users WHERE username = '$name' LIMIT 1");
if(mysql_num_rows($query) == 0) {
echo 'error';
exit;
}
while($row = mysql_fetch_array($query)) {
if($row['username'] == $name && $row['password'] == $pass) {
session_start();
$_SESSION['username'] = $row['username'];
$_SESSION['usrID'] = $row['id'];
echo 'success';
if($_POST['remember']) {
setcookie('username', $row['username'], $exp);
setcookie('password', $row['password'], $exp);
setcookie('usrID', $row['id'], $exp);
}
} else {
echo 'error';
exit;
}
}
?>
сеанс установлен успешно, однако cookie не установлен вообще. Я попытался установить все значения (домен, путь и т. д. но это ничего не изменило. Есть что-то очевидное, что я упускаю?
2 ответов
вот несколько советов:
- убедитесь, что вы указываете правильный формат истечения срока действия даты
-
при установке cookie на странице, которая перенаправляет, cookie должен быть установлен после вызова
header('Location: ....');
например:header('Location: http://www.example.com/'); setcookie('asite', $site, time()+60*60, '/', 'site.com');
-
если у вас есть человеческие url, как
www.domain.com/path1/path2/
, затем вы должны установить путь cookie в / для работы для всех путей, а не только для текущего один.setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
обратите внимание на последнюю /
в аргументах.
из руководства PHP:
путь на сервере, в котором cookie будет доступен на. Если установлено '/', cookie будет доступен в пределах всего домена . Если установлено '/foo/', печенье будет только доступно в каталоге /foo/ и все поддиректории /foo / bar / of domain . Неисполнение значение-текущее каталог файл cookie устанавливается.
-
setcookie()
определяет файл cookie для отправки вместе с остальными заголовками HTTP. Как и другие заголовки, куки должны быть отправлены до любого вывода из вашего скрипта, что означает, что до этого не должно быть никаких операторов HTML/code echo.
вы не сможете установить сервер cookie при использовании вызова AJAX. Вместо этого дождитесь успешного ответа и установите клиентскую сторону cookie. Чтобы сделать это проще, вы могли бы используйте плагин jQuery.