在laravel 5.2

时间:2016-05-04 13:26:44

标签: php ajax laravel session laravel-5

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

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

在我的控制器中,我尝试用忘记和拉动来移除它。

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

所以我的问题是,为什么我不能忘记我的ajax请求中的会话,所以它已经在下一页重新加载了?

2 个答案:

答案 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'后,此问题就完全消失了。