laravel 会话刷新和忘记方法无法按预期工作

Posted

技术标签:

【中文标题】laravel 会话刷新和忘记方法无法按预期工作【英文标题】:laravel's Session flush and forget methods not working as expected 【发布时间】:2017-02-12 22:15:09 【问题描述】:

我尝试使用以下方法从会话中删除一个值:

Session::forget('value')

但它没有删除!

但是,当我尝试像这样使用save 方法时:

 Session::forget('value')
 Session::save()

成功了! (即该值已从会话中删除。)

拜托-我做错了什么?使用 Session::flush()Session::forget() 时,我在 Laravel 文档中没有看到 save 方法。

【问题讨论】:

Here's save, it's not in the documentation, but it is part of the interface Session::save() 正在工作。 【参考方案1】:

save() 方法实际上会执行对文件的写入。

您的应用程序似乎在根据所有请求向用户输出内容之前没有调用 Session::save()。

如果不调用此方法,则 Session 文件将不会使用新值进行更新,并且它们在下次访问时仍然存在。

如果您希望确保删除或添加内容并且更改仍然存在,请务必始终调用 Session::save()。

【讨论】:

感谢您的回答。我被Session::forget('key'); 卡住了,它暂时删除了会话密钥,但在下一个请求会话密钥仍然存在。在使用 Session::save(); 之后的 forget() 方法后,它永久删除了会话密钥【参考方案2】:

我使用Session::save() 方法可以很好地保存会话数据。但是当我使用Session::flush() 刷新会话时,它不会清除存储在 Laravel 会话中的所有数据。 Session::forget('value') 可以很好地清除会话特定的值。

【讨论】:

【参考方案3】:

完全清除缓存(使用命令行或代码):

php artisan cache:clear
Artisan::call('cache:clear');

+ 完整会话刷新:

Session::flush();

通过此方法,您可以清除所有会话数据。

【讨论】:

在使用dd($session) 进行调试时,Session::flush() 并没有为我永久清除会话,直到我还调用了save() 方法。 (正如公认的答案所暗示的那样)

以上是关于laravel 会话刷新和忘记方法无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中间件无法按预期工作

了解 Laravel Passport 刷新令牌

Laravel 数据库会话

laravel 4持续数据正在进行 - jquery ajax提交

laravel 4持续数据正在进行 - jquery ajax提交

为啥我的 Laravel 一对一关系没有按预期工作?