Как установить переменные сеанса для CakePhp для работы с Chrome? - PullRequest
1 голос
/ 15 октября 2011

Я работаю над сайтом, используя CakePhp. При загрузке на сервер и тестировании с Firefox все работает отлично.

При использовании Google Chrome создается впечатление, что переменные сеанса не создаются.

Если я пытаюсь получить доступ к домашней странице, я сначала перенаправляюсь на страницу входа. После входа в систему он перенаправляет меня не на домашнюю страницу, а на страницу входа снова.

Что я заметил, так это то, что переменные сеанса не создаются в Chrome, но отлично работают с Firefox.

Ответы [ 3 ]

1 голос
/ 15 октября 2011

Проверьте эту страницу

Вот ссылка .

Так как при использовании браузера должен изменить поведение сервера?Ну, я точно не знаю, что делает Chrome с реферером, но кажется, что он каким-то образом его меняет.И cakePHP принудительно устанавливает для session.referer_check значение true, таким образом проверяя, что несколько запросов с одним и тем же PHPSESSID поступают с одного и того же URL-адреса.
Как и один запрос на php.net:

Еслизначение, указанное для session.referer_check, вы можете столкнуться с трудностями, когда кто-то заходит на ваш сайт и пытается войти в систему с использованием заглавного URL.Вход в систему не удастся, потому что любые вызовы session_start () приведут к тому, что существующий сеанс будет уничтожен и будет создан новый.Это становится более серьезной проблемой, когда за входом в систему следует перенаправление заголовка («Location: ...»), потому что session_start () в верхней части страницы завершится ошибкой.

Эти две настройкивместе, и вы получите адский беспорядок.Сначала я нашел быстрое решение, принудительно установив параметр session_start () в app / webroot / index.php.Но после большего чтения и отладки я наконец нашел виновника.

Взломать путь к исправлению

Нет простого способа помешать торту установить этот параметр, но вы можете определить свой собственный обработчик сеанса в ключе конфигурации Session.save.
Просто создайте файл с именем session_custom.php в app / config / и установите Configure :: write ('Session.save', 'session_custom');в файле core.php.
И в этом файле просто удалите следующие строки (скопируйте / вставьте из cake_session.php)

ini_set('session.referer_check', '');                    // Killing this f***ing config that was causing so much trouble with Chrome
ini_set('session.use_trans_sid', 0);                    // No session id in url
ini_set('session.name', Configure::read('Session.cookie'));    // Using custom cookie name instead of PHPSESSID
ini_set('session.cookie_lifetime', $this->cookieLifeTime);    // Cookie like time, depending on security level
ini_set('session.cookie_path', $this->path);                // Cookie path
0 голосов
/ 25 июля 2013

В вашем app/Config/core.php

Configure::write('Session', array(
    'defaults' => 'cake',
        'timeout'  => 14400,  // 4 hours 
        'cookieTimeout' => 14400, // 4 hours 
        'cookie' => 'cookiename',
        )
    );

проверьте, что «cookie» не содержит пробелов, даже подчеркивание может вызвать проблемы.

Была эта проблема некоторое время назад, и мне потребовалось некоторое время, чтобы понять это ...

0 голосов
/ 13 января 2012

Если я прав, то вы пытаетесь установить сессию, получая значение get из URL Если это так, я предлагаю вам использовать классический стиль PHP как URL http://localhost/something/projects/view?id=4f0998ad-0538-4454-b51a-0ca46f441e7f и использовать $ _GET ['id'] в вашем контроллере для получения значения

Я могу сказать, потому что я столкнулся с той же проблемой некоторое время назад и искал много блогов, чтобы найти подходящее решение, но не нашел, где, но использование вышеупомянутого подхода решило мой p

...