【发布时间】:2016-04-30 17:26:08
【问题描述】:
我是 Laravel 的新手,我了解了模型、视图、刀片、控制器和路由以及它们如何协同工作。到目前为止,一切都很顺利。
我在会话方面遇到了问题。
当我使用 Laravel 附带的 AuthController 并使用 POST 请求点击 auth/register 时,我注册的用户的数据确实会插入到 users 表中(使用 mysql),并且我确实得到了响应“位置”标头重定向到 / 就像它开箱即用一样。它像它应该的那样重定向。但在同一个响应中,没有设置/发送“Set-Cookie”标头。 Laravel 的会话部分对我来说不能正常工作。这对于 POST 到 auth/login 也是一样的,它会正确地进行身份验证并重定向到配置文件页面,但不会在响应中发回会话 cookie。
我正在使用:
- Laravel 5.2.11
- PHP 5.5.9
- xubuntu 14.04 (Ubuntu)
- Linux 内核 3.19.0-42-generic
- 作曲家 1.0
安装了 Laravel 需要的所有 php 模块。我正在使用 php 的内置 Web 服务器运行该应用程序。我用 sudo 运行它。我运行的确切命令是这样的:
sudo php -S localhost:8888 -t public/
所有路由都得到了正确响应。
我已经尝试了安装文档推荐的两种安装 Laravel 的方法,通过 laravel 可执行文件和 composer create-project。仍然没有设置任何 cookie。我已经制作了 laravel 项目 mod 777 的所有文件和目录。如果有任何区别,应用程序密钥设置在 .env 中。
config/session.php 文件正在使用会话的文件驱动程序。 设置会话后 storage/framework/sessions 目录下没有会话文件。
当我尝试使用文档中所述的会话功能自己设置会话时:
session(['sesskey' => 'somevalue']);
在响应中再次没有发送“Set-Cookie”标头,也没有创建会话文件。我应该添加没有错误消息报告。
当我使用上面的会话函数设置会话密钥时,我可以取回该值并将其回显到浏览器,如下所示:
echo session('sesskey');
所以它似乎至少将它保存在 php 的内存中。
当我尝试使用 withCookie 方法设置 cookie 时,我确实得到了带有 Set-Cookie 标头集的正确响应:
return response()->view('welcome')->withCookie(cookie("test", "val" , 3600));
我试着沿着发光的兔子洞走下去,看看是否能找到问题,但这有点超出我的想象。
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
我假设所有这些路由都应用了“网络”中间件?
-
路由文件确实包含那个是的。
-
所有不能正常工作的路由都在那个组里?
-
这就是问题所在!不过,在 laravel 文档中并没有指出这一点,至少在会话页面上没有指出。谢谢!我把所有的路线都放在那个函数/闭包中。现在我得到一个令牌不匹配异常。会弄清楚的。谢谢!
-
嘿嘿它发生了。它在 routes.php 文件routes.php 中有注释,它只是没有按照人们的想法明确地表达出来:)
标签: php laravel session cookies laravel-5.2