Подтвердить что ты не робот

Ларавельные сеансы, восстанавливающиеся при каждой нагрузке

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

Вчера я закончил работу над бродячим боксом в Ларавеле. Когда я закрыл компьютер, функции входа в систему работали нормально.

Открыв все сегодня, я обнаружил, что сеансы больше не работают.

Я пробовал все, что мог, но я не могу войти в систему, и данные флэш-памяти не работают.

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

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

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

Я пробовал в Chrome и IE, и ни один из них не войдет в систему. Я пытался несколько раз удалять содержимое папки хранилища и освобождать файлы cookie на стороне браузера. Я думал, что это может быть связано с тем, что время vm и локальная машина различны, но они синхронизированы.

Любые идеи, что может быть причиной этого? Кто-нибудь сталкивался с этой проблемой раньше?

edit: Я также сейчас воссоздал виртуальную машину, и проблема все еще существует

второе редактирование: теперь я начал с нуля с помощью VPS с цифровым окном с теми же результатами.

Я удалил все в файле маршрутов, и теперь все, что у него есть, это

<?php

Route::get('/sess/set/{value}', function($value) {
    Session::set('testv', $value);
Return 'Set ' . $value . ' - ' . Session::get('testv');
});

Route::get('/sess/get', function() {
    Return 'Get ' . Session::get('testv');
});

Я посещаю первую страницу, и она показывает любое значение, которое я вкладываю в сеанс. Нажмите вторую страницу, и вы получите только часть "Get" без значения сеанса.

session_attributes всегда имеет поле _token, я пытался изменить имя сеанса и домена и до сих пор не могу заставить сеансы работать.

edit3: для тех, кто сталкивается с этим, я никогда не определял проблему. Я начал совершенно новый проект, скопировал мои контроллеры и представления, обновил файл маршрутов, и теперь все работает, хотя я почти ожидаю, что буду обновлять этот пост завтра, чтобы сказать, что он сломан снова!

4b9b3361

Ответ 1

Моя проблема заключалась в том, что у меня были эхо-высказывания в моей функции. Это не позволяло правильному созданию/сохранению сеанса.

У меня было эхо перед моим 'return Redirect', поэтому перенаправление не получило сеанс...

public function login()
{
    // auth
    if (Auth::attempt(Input::only('email', 'password'), true))
    {
        return Redirect::route('companies.index');
    }
    // failed -> back to login
    return Redirect::back()->withErrors(['email' => 'Login failed.'])->withInput();
}

Подробности: http://brainwashinc.com/2014/02/17/laravel-sessions-not-working-in-4-1/

Ответ 2

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

В/app/config/session.php измените элемент конфигурации lifetime на что-то большее 0. Это исправило проблему для меня.

Ответ 3

У меня была эта же проблема, и я уже изменил свои значения сеанса на версию 4,1. Я зашел на наш сервер и запустил команду обновления композитора, после того, как все закончилось, все работает нормально.

composer update

Ответ 4

Я провел целый день с той же проблемой (сеанс, регенерированный почти с каждым запросом), и не нашел ничего полезного в Интернете. Проводя это здесь, если у кого-то есть такая же проблема.

В основном проблема заключалась в том, что cookie сеанса не был установлен правильно из-за ошибок шаблона. Поэтому, если вы столкнулись с этим, сначала проверьте, что cookie сеанса задается с каждым запросом через HTTP-заголовки.

В моем случае я ошибочно использовал что-то вроде этого в некоторых моих шаблонах:

@section('test')
<p>Some content here</p>
@endsection

Это неправильно!

В Laravel 4 он должен быть @stop вместо @endsection:

@section('test')
<p>Some content here</p>
@stop

Используя @endsection, приложение не закончило правильно, поэтому не было установлено cookie сеанса. Однако в файлах журналов нет никаких следов. BTW, такая ошибка также приводит к тому, что фильтры не применяются.

Ответ 5

У меня также есть эта проблема, и, как оказалось, она выводит данные раньше - я уже повторил некоторый отладочный текст в действии контроллера, а затем попытался сначала установить переменную сеанса - сеанс просто не был бы сохраняются и постоянно воссоздаются - как только я удаляю вывод, он работал нормально (и отлично с этого момента)

Ответ 6

Я обновился с Laravel 5.1 до 5.2 и имел проблему с многочисленными сеансами, создаваемыми при каждой загрузке страницы. Не имеет значения, какой драйвер сеанса я использовал, а также ничего не менял в конфигурации, чтобы он работал. (Я пробовал каждое предложение по каждому результату StackOverflow, выпущенному Google.)

Решение для меня: удалить "сетевое" промежуточное программное обеспечение из ваших маршрутов. По-видимому, сетевое промежуточное программное обеспечение автоматически включается в 5.2+, поэтому, если ваши маршруты также указывают его, вы завершаете создание нескольких сеансов.

Ответ 7

Есть много причин, по которым это может произойти, я сам столкнулся с этой проблемой. Исправить меня было:

public function getAuthIdentifier()
{
    return $this->username;
}

to

public function getAuthIdentifier()
{
    return $this->getKey();
}

в модели User.

Ответ 8

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

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