会话在其他控制器 Laravel 4 中显示为空


session shows empty in other controller laravel 4

我有 2 个控制器userControllerajaxController

我有 2 个这样的userController会话,

public function getCheckout()
{
    Session::put('vouchers', array());
    Session::put('finalcart', array());
}

我使用 ajax 在这样的vouchers session中放置更多值,然后使用 ajax 调用calculateprice方法。

public function checkvoucher()
{
    Session::put('vouchers',$vouchers);
}

现在,当我尝试像这样检索ajaxController会话时

public static function calculateprice()
{
    $finalcart=Session::get('finalcart'); // returns with values that i pushed in another controller.
    $finalcart=Session::get('vouchers'); // returns empty.
}

首先我调用getCheckout方法,然后调用checkvoucher,当我在checkvoucher中打印该会话时,我得到了正确的。然后我调用返回空会话的calculateprice。即使在将新值放入会话后,它也只是获取旧的会话值。我不知道我哪里做错了。

我认为 L5.2 实际上存在问题,因为如果您尝试访问基于会话的值(例如登录表单等),任何自定义错误页面都会显示此错误。

我认为这是因为异常没有通过 Web 中间件组?

为了解决和防止"未根据请求设置会话存储"出现在我的自定义 http 错误页面上,我移动了:

'Illuminate'Session'Middleware'StartSession::class,

从Web组到内核中的全局中间件组.php文件解决了该问题。

所以我的内核.php文件现在看起来像这样:

namespace App'Http;
use Illuminate'Foundation'Http'Kernel as HttpKernel;
class Kernel extends HttpKernel
{
   /**
    * The application's global HTTP middleware stack.
    *
    * These middleware are run during every request to your application.
    *
    * @var array
    */
   protected $middleware = [
       'Illuminate'Foundation'Http'Middleware'CheckForMaintenanceMode::class,
       'Illuminate'Session'Middleware'StartSession::class,
   ];
   /**
    * The application's route middleware groups.
    *
    * @var array
    */
   protected $middlewareGroups = [
       'web' => [
           'App'Http'Middleware'EncryptCookies::class,
           'Illuminate'Cookie'Middleware'AddQueuedCookiesToResponse::class,
           'Illuminate'View'Middleware'ShareErrorsFromSession::class,
           'App'Http'Middleware'VerifyCsrfToken::class,
       ],
       'api' => [
           'throttle:60,1',
       ],
   ];
   /**
    * The application's route middleware.
    *
    * These middleware may be assigned to groups or used individually.
    *
    * @var array
    */
   protected $routeMiddleware = [
       'auth' => 'App'Http'Middleware'Authenticate::class,
       'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth::class,
       'guest' => 'App'Http'Middleware'RedirectIfAuthenticated::class,
       'throttle' => 'Illuminate'Routing'Middleware'ThrottleRequests::class,
   ];
}

如果有更好的解决方案,我很高兴听到它们,因为我对如何实现中间件的控制有点脆弱!