Laravel包会话变量没有用ajax调用保存

时间:2017-09-26 15:36:25

标签: php laravel session package

我正在构建一个名为under-construction的包。在配置中激活此程序包时 文件网站将是underconstruction只有具有正确代码的人才能访问 应用。

https://github.com/larsjanssen6/underconstruction

我现在遇到的问题:

当输入代码时,我进行了一个ajax调用,该调用命中了这个控制器方法(称为检查):

https://github.com/larsjanssen6/underconstruction/blob/master/src/Controllers/CodeController.php

如果代码正确,则设置会话变量:

session(['can_visit' => true]);

然后在我的 vue.js 代码中,我重定向到/。它会再次击中我的中间件。在这里,我检查是否存在名为can_visit的会话。

return session()->has('can_visit');

https://github.com/larsjanssen6/underconstruction/blob/master/src/UnderConstruction.php

但会话变量can_visit总是不见了!怎么可能?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

您未加载会话中间件,因此未启动会话且不会保留任何值。

正如评论中所提到的,即使您的受保护路由(/)位于Web中间件(读取会话)中,您的服务提供商的路由(/under/construction,{{1不是(没有写会话)。

简单的解决方法是添加会话,甚至更好的整个Web中间件。

/under/check

但是,如果用户将中间件添加到其Web中间件组,您可能会很快遇到无限重定向循环的问题。因此,我会添加一些检查,以确保您不会使用其中一条$routeConfig = [ 'namespace' => 'LarsJanssen\UnderConstruction\Controllers', 'prefix' => 'under', 'middleware' => [ 'web', // add this // DebugbarEnabled::class, // leaving this dead code behind despite vcs ], ]; 路线。

underconstruction

最终从这个项目的背景中猜测,我希望大多数人都希望在全球中间件中坚持这一点。但是,您将遇到同样的会话 - 尚未启动的问题,因为它不会在全局中间件中运行。所以还有更多可以咀嚼的东西。快乐的编码!