【问题标题】:Laravel 5.2.11, sessions are not working, session cookie not being setLaravel 5.2.11,会话不工作,会话 cookie 未设置
【发布时间】: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


【解决方案1】:

在 laravel 5.2 中,你需要使用“web”中间件来解决你的问题,就像那样

Route::group(['middleware' => ['web']], function () {
//
});

【讨论】:

  • 也谢谢你。是的,将使用会话的路由必须包含在 Web 中间件的函数中。我想初学者应该阅读 laravel 文档资料和网站上的教程。我之前看到有人问过这个关于会话不持久的问题,但我没有看到任何人提到网络中间件的答案。
  • 你是对的@LarryLawless 每个初学者都应该阅读 laravel 文档资料和网站上的教程。
【解决方案2】:

为请求使用中间件\Illuminate\Session\Middleware\StartSession::class

Route::group(['middleware' => [\Illuminate\Session\Middleware\StartSession::class]], function () {

});

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2020-11-27
    • 2015-02-26
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2020-11-27
    相关资源
    最近更新 更多