Установка 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.