Идентификатор сеанса слишком длинный или содержит недопустимые символы в Laravel 4

Я установил Laravel 4.0 и получил эту ошибку

ErrorException SessionHandler:: read(): идентификатор сеанса слишком длинный или содержит недопустимые символы, действительными символами являются a-z, A-Z, 0-9 и '-,'         return (bool) $this- > handler- > close();     }     /**      * {@inheritdoc}      /     public function read ($ id)     {         return (string) $this- > handler- > read ($ id);     }     /*

Ответ 1

У вас есть Laravel 3, установленный на той же машине? По умолчанию Laravel 4 использует то же имя cookie сеанса (как Laravel 3), которое теперь находится в файле /app/config/session.php. Просто измените:

'cookie' => 'laravel_session',

например,

'cookie' => 'laravel_session_4',

и обновите браузер. Теперь все должно работать.

Ответ 2

Возможно, у вас есть коррумпированный файл cookie. Попробуйте очистить файлы cookie в своем браузере.

Взгляните на это обсуждение: fooobar.com/questions/232570/...

Особенно:

Как вы в конечном итоге сталкиваетесь с незаконными символами в PHPSESSID? Разве они не генерируются PHP автоматически? - Lèse majesté Июль 6 '10 в 11:57

Они есть, но cookie, который связывает вас с сгенерированным идентификатором сеанса, является клиентской. Если этот файл cookie изменится на недопустимый формат (кто-то пытается что-то использовать), PHP это заметит. - Aleksey Korzun 6 сен '11 в 19:56

Ответ 3

Для этой проблемы есть отчет об ошибке (https://bugs.php.net/bug.php?id=68063)

Вы можете проверить успех своего session_start и сгенерировать идентификатор, если необходимо:

$ok = @session_start();
if(!$ok){
session_regenerate_id(true); // replace the Session ID
session_start(); 
}