当前位置: 首页 > 知识库问答 >
问题:

Laravel会话cookie在使用AJAX时未加密

韩智敏
2023-03-14

我将为我的应用程序创建一个单一登录界面。另一个应用程序发送一个AJAX POST请求,我对用户进行身份验证并返回响应。会话cookie已设置,但未加密。

相关守则

$user = User::where('email', $email)->first();
if ($user) {
  Auth::login($user);
  return response("OK", 200);
}

Kernel.php中我的“api”部分

'api' => [
    'throttle:60,1',
    'bindings',
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \App\Http\Middleware\EncryptCookies::class,
],

我的路线(无其他中间件)

Route::post(
  '/auth-request', [
  'uses' => 'UserController@post_authenticateRequest',
  'as' => 'authrequest'
]);

Kernel.php中的EncryptCookies类似乎对AJAX post请求没有任何影响,但仅对会话部分有效。当我手动添加cookie时,如

response("OK", 200)->cookie("mysession", Session::getId(), 60);

它被加密了!

当我在Kernel.php中完全删除“api”和“web”的加密Cookies时,从AJAX请求中创建的会话会被正确加载——但不再加密。

如何对AJAX会话cookie进行加密?我需要其他中间件吗?

谢谢你的帮助。

共有1个答案

封烈
2023-03-14

在阅读了lagbox的评论之后,我在“api”部分尝试了几个地方来定义EncryptCookies::类。我不仅要把它放在StartSession之前,还要把它作为第一个元素。现在它工作了!

我在Kernel.php中的完整$middleware组部分现在看起来像这样:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\App::class,
    ],

    'api' => [
        \App\Http\Middleware\EncryptCookies::class,
        'throttle:60,1',
        'bindings',
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    ],
];

希望这是有益的。

 类似资料:
  • 设置 我已经使用CreateReact应用程序设置了前端环境。在此环境中,我使用Axios向我的节点JS Express后端服务器/登录endpoint发出POST请求。我使用express sessions设置会话中间件,并将会话存储在Redis中。我目前在本地主机上运行所有这些。 环境 > React App-http://localhost:3005/kp(注意:服务运行在http://lo

  • 问题内容: 我有一个使用AJAX加载新php文件并更新显示的单页网站。 我从主页开始php会话,但是当我使用ajax更新内部html时,我需要这些会话变量来加载新的php文件。 这篇文章与此类似:PHP会话变量未保留。但是我检查了一下,我的php.ini有 主页PHP: 在用户输入之后,我使用ajax调用php文件并加载页面的一个小节: 有人可以告诉我我缺少哪些重要步骤吗?谢谢。 更新: 在主页和

  • 问题内容: 如何使 connect.sid cookie本身仅是会话cookie,而不是持久性cookie? 我尝试失败 但是cookie仍具有到期时间戳。 问题答案: 以上工作。因此,通过将maxAge设置为null,我确实管理了expressjs以使用会话cookie。ew

  • 问题内容: 我正在尝试确定基于ajax的登录表单进行身份验证和设置客户端cookie的最安全方法。 和 http://www.codinghorror.com/blog/archives/001167.html 所以,我想我的核心问题是… 1)使用纯Ajax设置cookie是否安全,如果是,最安全的方法是什么(httpOnly + SSL +加密值等)? 2)纯ajax方法是否涉及设置cookie

  • 问题内容: 我几个月前开始使用PHP。为了为我的网站创建一个登录系统,我阅读了有关cookie和会话及其区别(cookie存储在用户的浏览器中以及服务器上的会话中)的信息。当时,我更喜欢cookie(谁不喜欢cookie ?!),只是说:“谁在乎?我在将它存储在服务器中没有任何好处”,所以,我继续使用cookie我的学士毕业项目。但是,在完成了我的应用程序的大部分工作之后,我听说对于存储用户ID的

  • 这里的问题是我试图通过ajax登录到我的系统。让我给你的第一个解释一下。 当我的用户输入他的登录详细信息时,它将通过Ajax请求发送到服务器,然后在验证后,我创建一个会话条目,并保存用户ID和登录标志等信息。 然后我通过Json将这些值返回给用户,由一段javascript处理,并将用户重定向到仪表板。 如果用户未经身份验证,则显示错误。 但现在这里发生的是。当我创建会话变量时以及当用户重定向到仪