Изменен ли ключ сеанса Laravel все время?

Я использую "хранилище файлов" для своей сессии. Когда я запустил это:

Session::set('awesomekey', 'myVal123');

И обновите страницу, я вижу каждый раз новые файлы, созданные в /storage/session. Я предположил, что он будет обновлять один и тот же файл каждый раз. Это в основном означает, что сеансы вообще не работают. Другими словами, если он сохраняет воссоздание файла сеанса, это никогда не работает:

Session::get('awesomekey');

Или, по крайней мере, он возвращает пробел. Что мне не хватает, что может привести к созданию нового сеансового ключа при каждом загрузке страницы?

UPDATE

При дальнейшем расследовании кажется, что cookie регенерируется при каждой загрузке страницы. Что может быть причиной этого?

Я даже не смотрю на вход в систему, поэтому эта информация для меня бесполезна → http://willworkforbanjos.com/2014/02/laravel-sessions-not-working-in-4-1/

Моя проблема возникает, когда я просто помещаю вышеуказанный набор и получаю код в файле master.blade.php. Он должен установить его, сохранить информацию, а при следующей перезагрузке получить нужную информацию из сеанса. Но это невозможно, потому что при перезагрузке он изменил файл cookie на какой-то другой код.

Кто-нибудь знает, почему это происходит?

ОБНОВЛЕНИЕ 2

  • Добавление: 'lifetime' = > 120 to session.php не работает. (@Sheikh Heera)
  • Размещение кода только в контроллере не работает. (@Phill Sparks)
  • Я пробовал хром и firefox, тот же результат (@The Shift Exchange)

Просто чтобы понять, что я пытаюсь сделать. Я добавлю следующий код в HomeController.php:

public function index()
{
    Session::put('awesomekey', 'myVal123');
    return View::make('home.index');
}

Затем я помещаю это в свой master.blade.php:

print Session::get('awesomekey');

Я не включаю никаких "штампов" или случайных эхо-сигналов в моей стороне контроллера кода, за исключением этого. Когда я открываю файл в первый раз, я вижу, как myVal123 распечатывается.

Затем я вынимаю эту часть в контроллере:

Session::put('awesomekey', 'myVal123');

И перезагрузите страницу. Теперь он ничего не печатает. Я вижу в своем браузере, что cookie изменился. Создание нового файла cookie потеряет ссылку на сеанс, поэтому я застрял, пытаясь понять, почему он это делает каждый раз, даже если он сохраняет сеанс при первом загрузке.

Любые идеи?

ОБНОВЛЕНИЕ 3

Я также пробовал:

У меня действительно заканчиваются идеи...

ОБНОВЛЕНИЕ 4

  • Я пошел в SessionManager.php и только под этим:

    $lifetime = $this- > app ['config'] ['session.lifetime'];

Я распечатал значение времени жизни:

print $lifetime; die();

И этот код никогда не попадал на перезагрузку страницы?! Однако, добавив это в мой контроллер:

$d = Config::get('session.lifetime');
print $d;

Фактически распечатывает мое значение для жизни....: (

Ответы

Ответ 1

Проблема заключалась в этой строке:

'cookie' => 'xxxx.com',

в session.php. По-видимому, он теряет cookie, если у вас есть "." в имени файла cookie. Я не могу поверить, что Ларавелу это не нравится. Или, может быть, браузер в целом.

Ответ 2

Я считаю, что вы используете:

'lifetime' => 0 // number of minutes

в вашем файле app/config/session.php. Сделайте это примерно так:

'lifetime' => 120 // number of minutes or whatever you want

Это сработает. Я пробовал те же настройки, которые вы описали, и просто использовал 0, и я получаю тот же результат, каждый раз, когда создается новый файл, но как только я меняю его на 120 или так, он работает. Таким образом, имеет смысл, что если он настроен на 'lifetime' => 0 в конфигурации сеанса, то каждый раз, когда он просто создает новый файл для нового сеанса, потому что сеанс не живет. Итак, перейдите в свой app/config/session.php файл, и вы найдете что-то вроде этого, измените значение:

/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

Обновление:

Вы можете использовать следующий код, чтобы получить значение lifetime, установленное в файле app/config/session.php:

Config::get('session.lifetime');

Ответ 3

Посмотрите время истечения срока действия файла cookie в инструментах разработчика Chrome или Firebug. Если он установлен в 0, то файл cookie истекает немедленно.

Кроме того, проверьте, правильно ли настроены часы - могут произойти странные вещи, если есть разница между вашим хостом и часами браузера. Попросите обе системы обратиться к NTP, чтобы убедиться, что это не проблема.

Ответ 4

У меня была аналогичная проблема с сеансами, если вы используете модель. Пользователь и ваша таблица пользователей не имеют primaryKey как Id, вы должны перезаписать эту переменную в модели.

class User extends Eloquent {

     protected $primaryKey = 'admin_id';

}

Ответ 5

В/app/config/session.php проверьте настройку "Только HTTPS Cookie".

Убедитесь, что это "secure = > false", если вы не используете SSL!

Ответ 6

У меня возникли проблемы, связанные с этим. Файл сеанса не создавался каждый раз, но иногда я просто не могу получить отображаемую переменную сеанса. После нескольких часов экспериментов я обнаружил, что проблема связана с Debugbar.

Если вы используете Debugbar и имеете проблемы с сеансом, отключите его и повторите попытку подтверждения.