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

Устойчивые сеансы по субдоменам в Laravel 5

Использование 5.0

в config/session.php Я установил 'domain' => '.example.com', но он не работает. Я не могу продолжать сеанс даже в одном домене.

У моего сайта много поддоменов:

vancouver.example.com
newyork.example.com

и т.д.... они размещены на одном сервере и являются одним и тем же приложением Laravel (совместно используют один и тот же каталог хранилищ)

Я вхожу в систему с правильными учетными данными, после чего приложение перенаправляется на другую страницу на сайте, и у меня нет сеанса на этом этапе. var_dump(Auth::user()) показывает null, хотя я вошел в систему с правильными учетными данными.

storage/framework/sessions показывает 14 разных файлов, все они для меня, и я очистил их, прежде чем начать тестирование.

Я приложу свой метод AuthController @postLogin ниже, который отлично работает, если session.php 'domain' => null

public function postLogin(Request $request)
{
    $this->validate($request, [
        'email' => 'required|email', 'password' => 'required',
    ]);

    $credentials = $request->only('email', 'password');

    if ($this->auth->attempt($credentials, $request->has('remember')))     {
        Session::flash('message', 'You are now logged in.');
        Session::flash('status', 'success');

        if (str_contains($_SERVER['HTTP_REFERER'], '?goto=')) {
            $params = explode('?', $_SERVER['HTTP_REFERER'])[1];
            $target = explode('=', $params)[1];
        } else {
            $target = '/';
        }

        return redirect($target);
    }

    return redirect($this->loginPath())
                ->withInput($request->only('email', 'remember'))
                ->withErrors([
                    'email' => $this->getFailedLoginMessage(),
                ]);
}
4b9b3361

Ответ 1

Выяснил это. Обновите domain => '.example.com' в session.php и очистите файлы cookie для соответствующего сайта.

Ответ 2

@gadss

вам нужно добавить таблицу сеанса, подобную этой

php artisan session:table

composer dump-autoload

php artisan migrate

и измените .env на SESSION_DRIVER=database

также изменить config/session.php

'driver' => env('SESSION_DRIVER', 'database') и

'domain' => '.yourdomain.com'

после этого очистите кеш браузера и файлы cookie.

Ответ 3

Вы пытались хранить сеансы в базе данных, memcached или redis вместо файлов? У меня была схожая ситуация с твоей, и хранение сеансов в базе данных решило проблему для меня.

По какой-то причине драйвер сеанса Laravel не обрабатывает междоменные сессии правильно при использовании драйвера файла.