PHP Cookies хорошо работает на локальном хосте, но не работает на живом сервере - PullRequest
2 голосов
/ 13 декабря 2010

Примечание: эта проблема уже решена, наконец я обнаружил, что это не печенье проблема, проблема на функция unserialize (). Сериализованный cookie, который является параметром эта функция должна быть зачеркнута первый.

Привет, у меня проблема с PHP Cookies. Я использую PHP Cookies для сохранения пользовательских настроек. Я проверил мой код на моей локальной машине (localhost с использованием XAMPP). Все работает очень хорошо, включая печенье. Но когда я загрузил его на действующий сервер, куки не работают вообще. Кажется, что функция setcookie () не записывает значение cookie. Я проверил, отображая значение cookie как на моем локальном, так и на моем живом сервере. Значение $ _COOKIE [] на локальном хосте отображается, но не совпадает со значением на работающем сервере.

Я подумал, что это может быть связано с часовым поясом $ expire, как в этом посте http://anupraj.com.np/index.php/php-cookies-not-working-php-cookie-tutorial-and-scirpt/14. Но потом я понял, что установил срок действия файлов cookie через 1 месяц, а не только через час, как в этом сообщении в блоге. Так что я думаю, что это не так.

Это содержание setting.php

<?php
$defaultSettings['default_post_to'] = 'both';
$defaultSettings['timesince_style'] = 'simplify';
...
$defaultSettings['display_geo_info'] = 'true';
$defaultSettings['enable_javascript'] = 'true';

if(!isset($_COOKIE['settings'])){
    setcookie("settings", serialize($defaultSettings), time()+3600*24*30);
    header('Location: index.php');
}
$setting = unserialize($_COOKIE['settings']);
?>

А это содержимое index.php

<?php
/*
ini_set ("display_errors", "1");
error_reporting(E_ALL);  
*/

session_start();

require_once("settings.php"); // Settings files
require_once('varlib.php'); // Get all possible passed variable
require_once('auth.php'); // Check for channel login status

// If inputbar form submitted
if( $_POST['inputbox'] ){
...
}
else{
    echo "SETTING COOKIE: <br/><br/>";
    // This print_r is only showing the $_COOKIE value (which is stored on $setting) on localhost but no on live server
        print_r($setting);
    switch( $com ){
        ...
    }
}
?>

Я везде об этом обыскиваю (Google, stackoverflow, спрашиваю друзей по twiiter / FB), но пока нет решений

Я надеюсь, что какое-то тело может дать мне решение здесь Спасибо:)

Ответы [ 5 ]

1 голос
/ 13 декабря 2010

Посмотрите на параметры пути и домена для функции setcookie. Ссылка: setcookie @ PHP документы http://php.net/manual/en/function.setcookie.php

Попробуйте установить cookie:

if ($on_localhost) { // change this
    $domain = '.localhost';
} else {
    $domain = '.webhoster.com'; // change this
}
setcookie(
    'settings',
    serialize($defaultSettings),
    time()+3600*24*30,
    '/',          // this is the path
    $domain       // this is the domain
);

Удачи!

0 голосов
/ 17 января 2017

При применении решений мы забываем об основных файлах cookie.

Файлы cookie похожи на заголовки.Как и заголовки, он должен быть отправлен до того, как будет сгенерирован какой-либо вывод.тогда только это устанавливает успешно.Я много боролся за эту проблему, но когда я прошел основы, эта проблема была решена быстро.

этого синтаксиса будет достаточно, чтобы решить эту проблему ...

setcookie(
'settings',
serialize($defaultSettings),
time()+3600*24*30,
'/'          // this is the path
);
0 голосов
/ 20 марта 2014

Возможно, ваше серверное время неверно, поэтому Cookeis не работает на сервере.

Попробуйте:

setcookie("settings", serialize($defaultSettings), 0);

Установка срока действия на ноль решит вашу проблему в этом случае.или обновите время вашего сервера.

0 голосов
/ 13 декабря 2010

Попробуйте exit() после заголовка Location.

Местоположение-заголовок не препятствует выполнению PHP-скриптом дальнейших инструкций, возможно, после заголовка выполняется что-то, что вызывает неправильное поведение.

0 голосов
/ 13 декабря 2010

Попробуйте это:

setcookie("settings", serialize($defaultSettings), time()+3600*24*30, '/'); // added path

Кроме того, может ли быть serialize($defaultSettings) результат слишком большим?

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