web-dev-qa-db-fra.com

Sessions persistantes sur plusieurs sous-domaines dans Laravel 5

En utilisant 5.0

dans config/session.php, j'ai défini 'domain' => '.example.com' mais cela ne fonctionne pas. Je ne peux pas persister une session sur même un domaine comme celui-ci.

Mon site a plusieurs sous-domaines:

vancouver.example.com
newyork.example.com

etc ... ils sont hébergés sur le même serveur et sont la même application Laravel (partagent le même répertoire de stockage)

Je me connecte avec les informations d'identification correctes, sur lesquelles l'application redirige vers une autre page du site, et je n'ai pas de session à ce stade. var_dump(Auth::user()) affiche null même si je me suis connecté avec les informations d'identification correctes. 

storage/framework/sessions montre 14 fichiers différents ici, ils sont tous pour moi et je les ai effacés avant de commencer à tester cela.

Je vais attacher ma méthode AuthController @ postLogin ci-dessous, qui fonctionne bien si 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(),
                ]);
}
24
Anthony Vipond

Deviner. Mettez à jour domain => '.example.com' dans session.php et effacez les cookies pour le site en question.

37
Anthony Vipond

@gadss 

vous devez ajouter une table de session comme celle-ci

php artisan session:table

composer dump-autoload

php artisan migrate

et remplacez .env par SESSION_DRIVER=database

modifie également config/session.php

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

'domain' => '.yourdomain.com'

après cela, effacez le cache et les cookies de votre navigateur.

13
engr.waqas

Avez-vous essayé de stocker les sessions dans la base de données, memcached ou redis au lieu de fichiers? J'ai eu une situation similaire à la vôtre et le stockage de sessions dans la base de données a résolu le problème pour moi. 

Pour une raison quelconque, le pilote de session de Laravel ne gère pas correctement les sessions entre domaines lors de l'utilisation du pilote de fichier.

3
BrokenBinary

Si quelqu'un rencontre toujours le problème avec le cookie de sous-domaine. Essayez de changer le nom du cookie de session dans config/session.php

0
huuthang