J'essaie de faire fonctionner les sessions dans Laravel 5.7, mais je n'arrive pas à le faire fonctionner; Je ne sais pas pourquoi. J'ai regardé la documentation officielle, regardé un tas de messages SO, fait une recherche sur Google pour le problème sur d'autres sites, et je ne peux toujours pas le comprendre.
En gros, j'ai un itinéraire comme celui-ci dans web.php
:
php artisan config:clear php artisan route:clear
Ensuite, dans la méthode index
de SomeController
, J'ai ce qui suit:
a:5:{s:6:"_token";s:40:"token-here";s:9:"_previous";a:1:{s:3:"url";s:26:"http://example.com/some_path";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}i:0;s:5:"test3";i:1;s:16:"Some Third Value";}
Avec cela, j'obtiens toujours la Valeur de sauvegarde
renvoyée à l'écran.
Si Je vais dans / storage / framework / sessions
, je vois un fichier de session qui a le contenu suivant (que j'ai anonymisé):
session(['test', 'Some Value']); session(['test2', 'Some Other Value']); session(['test3', 'Some Third Value']); $value = session('test', 'Backup Value'); echo $value;
En gros , il semble que la session fonctionne en quelque sorte, mais elle ne semble stocker que test3
. Si je commente la ligne test3
dans le contrôleur, alors il ne stocke que test2
. Et même si je n'ai que la ligne test
dans le contrôleur, il ne récupère toujours pas la valeur.
J'ai également essayé de basculer la session en session DB avec la session appropriée migrer le fichier à la https://laravel.com/docs/5.7/session , mais c'est ne fonctionne toujours pas.
En gros, je n'ai aucune idée de ce qui se passe. Je peux dire que je n'utilise pas l'authentification native de Laravel, donc je ne sais pas si cela compte, mais je pense que cela ne devrait pas. De plus, j'ai essayé de redémarrer mon hôte local, mais cela n'a pas fait de différence et d'exécuter les deux commandes suivantes, qui ne semblent rien changer:
Route::get('/some_path', 'SomeController@index');
Enfin, je J'ai essayé d'ajouter use Session
en haut du contrôleur, mais cela ne semble pas non plus avoir d'importance.
En gros, je ne sais pas quoi faire. Qu'est-ce qui pourrait en être la cause? Merci.
6 Réponses :
Ce qui se passe ici, c'est que lorsque vous ajoutez ceci:
session(['test1' => 'xx']);
Cela ajoute test à l'index 0e de la session et x au 1er . Maintenant, quand vous refaites un
session(['test' => 'x']);
Il écrase le 0e et le 1er index de session par de nouvelles valeurs.
Par conséquent, lorsque vous imprimez les données de session, vous obtenez les dernières valeurs.
Vous pouvez vérifier cela en faisant un dd (session () -> all ())
et en voyant la même chose à l'écran.
Si vous souhaitez créer une relation clé-valeur et stocker les données dans un tel emplacement, veuillez utiliser la syntaxe suivante:
session(['test1', 'xx'])
session(['test', 'x'])
D'accord, je me sens officiellement stupide maintenant. J'utilisais la mauvaise syntaxe. Plus précisément, je faisais session (['test', 'Some Value'])
, alors que j'aurais dû faire session (['test' => 'Some Value']) < / code>. Il fonctionne maintenant avec le fichier de session, ce qui est bien. Cependant, lorsque je change le pilote de session sur
database
, même avec la table DB là-bas, il enregistre toujours la session dans le fichier. Des idées?
Cela ne devrait pas se produire si vous avez correctement configuré le pilote de session en tant que db. Assurez-vous de vérifier que votre SESSION_DRIVER
dans le fichier .env est défini comme base de données. Vérifiez également le fichier session.php. Enfin, veuillez exécuter les deux commandes php artisan config: clear et php artisan cache: clear
et déconnectez-vous et reconnectez-vous et vérifiez les entrées dans la base de données.
Cripes! Je l'ai finalement réussi, Deepak. Je n'avais pas changé la valeur SESSION_DRIVER
dans le fichier .env
. (Je ne me souviens pas que cela ait été mentionné nulle part dans la documentation Laravel.) Quoi qu'il en soit, ce changement a instantanément fait tout fonctionner. Merci beaucoup!
Salut mon pote! :)
Laravel 5.7 - stocker la valeur dans la session avec le système de fichiers:
Définir la valeur dans la session:
session()->forget('email');
Obtenir la valeur de la session :
$email = session()->get('email');
Supprimer la session de courrier électronique:
session()->put('email', 'jai@gmail.com');
Cela fonctionne comme un charme :)
p >
@davefrassoni assurez-vous d'avoir inclus 'use Illuminate \ Support \ Facades \ Session;' en haut de votre manette.
Dans ce cas, tout ce que vous avez à faire est d'ajouter une fonction de chaîne middleware "web" à votre règle de routage. par exemple
php artisan config:clear php artisan route:clear
Puis vider le cache:
Route::get('/some_path', 'SomeController@index')->middleware('web');
ceux qui ne parviennent pas à enregistrer la session, le problème est que vous avez oublié de mettre la fonction save () après put donné est l'exemple.
$cartCount = Session::get('cartCount'); if(empty($cartCount)){ $cartCount = 0; Session::put('cartCount', $cartCount); } Session::save();
Session :: save () peut vous sauver la vie, essayez-le si le problème persiste.
Si pour une raison quelconque votre code ne fonctionne pas - par exemple, vous utilisez dd () quelque part, alors votre session ne sera jamais sauvegardée. Cela m'a fait trébucher pendant 20 bonnes minutes.
Vous pouvez utiliser la méthode push de session de Laravel. par exemple
Session :: push ('test', 'some value');
Que se passe-t-il si vous mettez cela en premier? $ value = session ('test', 'Valeur de sauvegarde');
Deepak Singh,
Session :: put ()
etSession :: push ()
fonctionnent, mais passession ()
. Pourquoi? techcyclist, changer l'ordre ne faisait aucune différence. De plus, une partie de mon fichier de session ressemble maintenant à ce qui suit:"test"; i: 1; s: 10: "Some Value"; s: 4: "test"; s: 10: "Some Value"; s: 5: "test2"; s: 16: "Some Other Value";
Fondamentalement, il semble stocker des éléments à la fois desession ()
etSession :: put ()
, bien que celui desession ()
ne puisse pas être récupéré. Je suis toujours si confus. Que fait Laravel sous le capot pour empêchersession ()
de fonctionner?De plus, pour ce que ça vaut, il semble que la classe
Session
ne permette que la méthode de sauvegarde des sessions par fichier. J'ai essayé de changerSESSION_DRIVER
danssession.php
defichier
àbase de données
, mais ce n'est pas enregistré dans la base de données; il est toujours sauvegardé dans le fichier dans le répertoirestorage
.@HartleySan Mis à jour avec une réponse. Vérifiez si cela vous aide.