我有 2 个控制器userController
和ajaxController
我有 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,
];
}
如果有更好的解决方案,我很高兴听到它们,因为我对如何实现中间件的控制有点脆弱!