Laravel 5 - session ne fonctionne pas
Voici config/session.php
:
return [
'driver' => 'file',
'files' => storage_path().'/framework/sessions',
];
Mon storage/framework/sessions
ont 755 autorisations.
Quand j'ai mis ces 2 lignes dans mon contrôleur
Session::set('aa', 'bb');
dd(Session::get('aa'));
- Je recevoir prévu "bb"
de sortie. Mais si j'ai fait un commentaire de la première ligne:
//Session::set('aa', 'bb');
dd(Session::get('aa'));
et actualiser la page, j'attend encore "bb"
mais se null
.
Aussi, storage/framework/sessions
est vide.
Que dois-je faire pour rendre la Session de travail?
Qui est le propriétaire de
Essayez de
Je pense qu'il n'est pas sur les autorisations, mis à
juste fatigué
Je pense que c'est parce que Laravel est un gestionnaire de session personnalisé, et de faire
storage/framework/sessions
? 755
signifie que seul le propriétaire peut écrire dans le répertoire. Donc, pour ceux d'autorisations de travail, le propriétaire le plus couramment devrait être utilisateur du serveur web, qui est en général quelque chose comme www-data
, apache
, etc, en fonction de quelle distribution Linux et serveur HTTP que vous utilisez.Essayez de
775
au lieuJe pense qu'il n'est pas sur les autorisations, mis à
777
et de la session ne fonctionne toujours pas.juste fatigué
cookie
et database
pilotes, le même :/ c'est bizarre.Je pense que c'est parce que Laravel est un gestionnaire de session personnalisé, et de faire
dd()
interrompt le cycle de vie de demande avant le code de la charge de stocker les données de session dans le fichier peut être exécuté. Essayez d'utiliser var_dump()
au lieu de dd()
.OriginalL'auteur Limon Monte | 2015-03-30
Vous devez vous connecter pour publier un commentaire.
Laravel 5 gère les sessions via un middleware classe appelée
StartSession
. Plus important encore, ce middleware est unTerminableMiddleware
et le code qui enregistre les données (dans votre cas, le fichier de session) est situé dans leterminate
méthode, qui est exécuté à la fin du cycle de vie de demande:Lors de l'appel de
dd(Session::get('aa'));
la demande est interrompu avant laterminate
méthode de la middleware peut être appelé.Curieusement, le Laravel Middleware De La Documentation explique d'ailleurs Provisoire Middleware logique en donnant la Laravel
StartSession
middleware comme un exemple:Cela étant dit, essayez d'utiliser
var_dump()
au lieu d'utiliserdd()
.Vous êtes le bienvenu.
Votre question est assez intéressant que j'ai décidé de faire creuser un peu pour comprendre la cause exacte. J'ai mis à jour la réponse avec une explication plus détaillée de ce qui se passe réellement.
Merci beaucoup!
Je vous remercie pour votre explication. Est-il un moyen de l'enregistrement d'un contenu de la séance, avant que la requête se termine ? Je sais que nous pouvons manuellement Session d'appel::save() mais cela ne semble pas faire l'affaire. J'ai vraiment besoin d'être en mesure de le faire!
OriginalL'auteur Bogdan
Avec laravel 5.*, vous devez modifier le fichier du noyau comme ci-dessous:
puis aller de stockage/cadre/session de dossier et de modification de l'autorisation de 755 si il a un autre montant, puis supprimez tous les fichiers dans votre espace de stockage/cadre/chemin de session, utilisez votre code à nouveau pour mettre quelque chose dans une session, regardez le stockage de l'/cadre/session dossier.
Si votre session de travail, vous pouvez voir l'étrange long de fichiers qui appartiennent à la séance dès maintenant, et vous êtes fait!
Si votre problème n'est pas encore résolu, aller à config/session et le changement:
à un autre montant prédéfini comme:
ou même
et enfin si vous avez un dossier vide de stockage/cadre/session, vous avez toujours un problème pour vous !!!
OriginalL'auteur arash peymanfar