【问题标题】:Laravel Session Facade unexpected behaviourLaravel 会话外观意外行为
【发布时间】:2017-08-28 21:39:53
【问题描述】:

在我的 Laravel 5.4 项目中,我试图像这样在我的控制器方法中存储一个状态令牌。

 use Illuminate\Support\Facades\Session ;
 ... 
 public function authorize()
 {
    Session::set('state', $client->getState());

       A lot of code here...

    header('Location: ' . $authorizationUrl);
        exit;
 }

我也尝试过使用辅助函数

  session('state', $client->getState());

但无论我尝试了什么,会话都不会被创建或持续存在。

所以我转而直接使用 Symfony 组件..

use Symfony\Component\HttpFoundation\Session\Session;
...
public function authorise()
{
   $session = new Session();
   $session->set('state', $client->getState());
   ...
}

这样做非常有效。任何解释为什么门面不起作用?

【问题讨论】:

  • $client->getState() 返回什么?
  • 我的第一句话,“存储一个状态令牌”。它只是用于防止 Oauth2 请求中的 CSRF 的随机字符串。例如LWy7LLRNZc1uXTfe4vXtsXbwGK4Ll7Jd5dEo7QFw
  • 此外,在进行故障排除时,我已经测试了这当然是可能的原因,我只是硬编码了一个键和值,例如“mykey”、“myvalue”,而不是使用该函数。
  • 检查您的存储文件夹权限
  • @Amr Aly 谢谢你的帮助。事实证明,我没有提供我应该提供的所有信息。我正在实施第三方脚本并在我的问题中过度简化它。我应该提到在函数结束之前发生了重定向header('Location: ' . $authUrl);。我编辑了上面的问题以现在显示这一点,并且还包括下面的解释以供其他人参考。

标签: php laravel session laravel-5.4 php-7.1


【解决方案1】:

作为参考,如果其他人有这样的问题,问题是由重定向、到 oauth url、在函数完成之前或加载视图等引起的(即会话在最后存储Laravel 应用程序“生命周期”。)这个问题可以在任何数量的情况下表现出来,而不仅仅是重定向,包括使用 dd()die()等。

例如如果你的方法基本上是这样的 Sessions 工作正常。

public function myAwesomeMethod($params)
{
    Session::put('theKey','theValue');

    return view('theView'); //Session gets stored at this point.
}

但是,如果您的方法看起来像这样,您就会遇到问题。

public function myCoolMethod($authUrl)
{
    Session::put('theKey','theValue');

    header('Location: ' . $authUrl); //Session seems to be lost here.
    exit;
}

解决方案很简单,但由于我不熟悉 Laravel 会话,我错过了它。在最后一个示例中,只需将 save() 方法添加到 Sessions 类(如果使用 Facade),如下所示。

public function myCoolMethod($authUrl)
{
     Session::put('theKey','theValue');
     Session::save();// Session gets stored immediately

     header('Location: ' . $authUrl); 
     exit;
 }

【讨论】:

    猜你喜欢
    • 2016-07-20
    • 2014-08-09
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2013-12-16
    • 2013-11-20
    相关资源
    最近更新 更多