[英]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.