我正在向我的控制器运行一个jquery ajax帖子,在那里我检查会话是否存在。如果是这种情况我读取了值,忘记我的会话并将一些数据返回到视图。
如果我使用session() - >在我使用忘记之后在控制器功能中有,它将被删除。但是当我重新加载页面并再次执行ajax请求时,会话仍在那里。
在我的控制器中,我尝试用忘记和拉动来移除它。
$request->session()->forget('last_history_id');
$request->session()->pull('last_history_id')
所以我的问题是,为什么我不能忘记我的ajax请求中的会话,所以它已经在下一页重新加载了?
答案 0 :(得分:1)
我建议在file
文件中从database
驱动程序更改为config/session.php
驱动程序(或文件以外的任何驱动程序)。
使用file
和异步调用时有一些known issues。我遇到了您遇到的确切问题,在切换到database
后,问题就解决了。
您可以轻松切换到database
。以下是docs以获取更多帮助,但以下是相关代码。
您需要设置一个表来包含会话项。您可以使用php artisan session:table
生成迁移。然后只需composer dump-autoload
,然后是php artisan migrate
。这将为您在数据库中创建表。
最后,告诉Laravel你更喜欢这个驱动程序。根据您设置环境的方式,可以在config/session.php
中对其进行硬编码,也可以从.env
文件中提取。
答案 1 :(得分:0)
这个问题可能与我的问题有关:
我最近遇到了一个问题,session_id
在使用AJAX请求时发生了变化。可能是当你检查会话时,它实际上是一个新会话。因此,当您忘记它时,它对浏览器主会话没有影响。
问题可能是路由上web
中间件的双重绑定。我没注意到网已经在RouteServiceProvider
中应用了。在问题路线上删除'middleware' => 'web'
后,此问题就完全消失了。