Любая причина, почему этот фрагмент кода не может правильно установить cookie - PullRequest
4 голосов
/ 04 августа 2011

Этот небольшой фрагмент кода PHP используется для установки файла cookie, который позволяет мне определить, вошел ли пользователь в систему. По какой-то причине после того, как я использую JavaScript для перенаправления, ни один из моих файлов cookie больше не устанавливается.Любая причина, почему это будет происходить?

Возможно, я не даю вам достаточно информации, поэтому дайте мне знать, если так.

...some database queries...
<?php 
    $expire=time()+(7 * 24 * 60 * 60);
    $row = mysql_fetch_array($query);
    $email = $row['email'];
    $userinfo['name'] = $name;
    $userinfo['email'] = $email;
    $userinfo = serialize($userinfo);
    setcookie("user", $userinfo, $expire);
    echo '<script type="text/javascript">
        window.location = "../index.php";
    </script>';

?>

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

Тори, убедитесь, что вы ничего не выводите, прежде чем вызывать set setcookie в PHP.Даже пустое пространство.Нет эха.Ничего такого.Я предполагаю, что ваши сценарии выводят что-то перед setcookie, и это нарушает ваш сценарий.Вы видите заголовок уже отправленной ошибки?Закомментируйте свой JS, а затем проверьте.Вы настраиваете таким образом

setcookie(name,value,expire,path,domain,secure); 

Домену необходимо указать имя домена в виде строки, например example.com, необязательно.Secure требует логического значения и является необязательным.Пропустите эти два и проверьте, установив путь к '/'

3 голосов
/ 04 августа 2011

Функция setcookie возвращает true или false, в зависимости от того, был ли cookie установлен успешно.Вы можете попробовать это для проверки:

if(!setcookie("user", $userinfo, $expire)) {
    echo 'Could not set cookie!';
}

Если это возвращает false, то Кумар прав.В противном случае должна быть какая-то другая причина.

EDIT setcookie может вызываться с большим количеством параметров, например:

setcookie(name,value,expire,path,domain,secure)

Обратите внимание на значения пути и домена.В прошлом у меня были проблемы с двумя разными страницами, которые не находили файлы cookie друг друга из-за разных путей / доменов.

Я заметил, что Вы перенаправляете на "../index.php".Попробуйте перенаправить на «index.php» и посмотреть, существуют ли там файлы cookie.Если да, то вы должны использовать общую переменную «путь» для установки файлов cookie.

С http://www.php.net/setcookie о переменной «path»:

Путь на сервере, на котором будет доступен файл cookie.Если установлено значение «/», файл cookie будет доступен во всем домене.Если установлено значение «/ foo /», файл cookie будет доступен только в каталоге / foo / и во всех его подкаталогах, таких как / foo / bar / домена.Значением по умолчанию является текущий каталог, в котором устанавливается cookie.

2 голосов
/ 04 августа 2011

Возможно, потому что $ userinfo является массивом. Это должна быть строка, для хранения нескольких элементов необходимо несколько файлов cookie

...