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(),
]);
}
Deviner. Mettez à jour domain => '.example.com'
dans session.php et effacez les cookies pour le site en question.
@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.
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.
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