Установка файла cookie в запросе AJAX? - PullRequest
12 голосов
/ 08 августа 2010

Я проверяю форму входа с помощью 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 ]

17 голосов
/ 08 августа 2010

Вот несколько предложений:

  • Убедитесь, что вы указываете правильный формат даты истечения срока действия
  • При установке файла 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 будет доступен в пределах всего домена. Если установлено '/ foo /', файл cookie будет только доступно в каталоге / foo / и все подкаталоги, такие как / foo / bar / домена. По умолчанию значение - это текущий каталог, файл cookie устанавливается.

  • setcookie() определяет файл cookie для отправки вместе с остальными заголовками HTTP. Как и другие заголовки, куки должны отправляться до любого вывода из вашего скрипта, что означает, что до этого не должно быть операторов html / code echo.
0 голосов
/ 08 августа 2010

Вы не сможете установить куки на стороне сервера при использовании вызова AJAX. Вместо этого подождите, пока вы не получите успешный ответ, и установите клиентскую сторону cookie. Чтобы сделать это проще, вы можете использовать плагин jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...