繁体   English   中英

不能忘记来自 Laravel 5.2 中 ajax 请求的会话

[英]Can't forget session from ajax request in laravel 5.2

我正在将 jquery ajax post 运行到我的控制器,在那里我检查会话是否存在。 如果是这种情况,我读取值,忘记我的会话并将一些数据返回到视图。

如果我在使用忘记后在控制器函数中使用 session()->has,它将被删除。 但是当我重新加载页面并再次执行 ajax 请求时,会话仍然存在。

在我的控制器中,我尝试通过忘记和拉动来删除它。

$request->session()->forget('last_history_id');
$request->session()->pull('last_history_id')

所以我的问题是,为什么我不能忘记我的 ajax 请求中的会话,所以它会随着下一页重新加载而消失?

我建议在config/session.php文件中从file驱动程序更改为database驱动程序(或除文件之外的任何驱动程序)。

使用file和异步调用时存在一些已知问题 我遇到了您遇到的确切问题,切换到database ,问题已解决。

您可以相当轻松地切换到database 这里是更多帮助的文档,还有下面的相关代码。

您需要设置一个表来包含会话项目。 您可以使用php artisan session:table来生成迁移。 然后只是composer dump-autoload ,然后是php artisan migrate 这将为您在数据库中创建表。

最后,告诉 Laravel 你更喜欢这个驱动程序。 根据您设置环境的方式,这可以在config/session.php硬编码,也可以从.env文件中.env

这个问题可能与我的有关:

我最近遇到了一个问题,即使用 AJAX 请求时session_id发生变化。 可能是当您检查会话时,它实际上是一个新会话。 所以当你忘记它时,它对浏览器的主会话没有影响。

问题可能是路由上的web中间件的双重绑定。 我没有注意到 web 已经应用于RouteServiceProvider 在我的问题路由上删除'middleware' => 'web' ,这个问题就完全消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM