javascript 会话Cookie在Remix/Express中不断重置

rdrgkggo  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(198)

我正在使用Remix,使用独立堆栈模板,我修改了它以使用Express。
我目前正在尝试使身份验证工作,我使用的流与默认使用的流相同,即createCookieSessionStorage流,顾名思义,它使用cookie来存储会话。
当我登录时,会话被正确创建,我可以在cookie中看到它。它看起来像这样:

这一切都很好,我可以从中提取登录用户。
然而,无论何时这个cookie存在,无论何时我输入我的任何路由,都会发生重定向,传递一个set-cookie报头,使这个cookie无效。
首先,在我登录后,set-cookie得到正确设置:

然后,当我访问任何页面,这是发射关闭:

如果我的__session cookie的值是在登录后设置的,就会发生这种情况。我甚至不需要登录,因为即使我手动设置了这个cookie的值,也会发生这种情况。如果我更改了这个值,没有重定向和设置cookie:路径=/被触发。
知道为什么会发生这种情况吗?就好像服务器读取了cookie的值,然后决定删除它。我使用的验证码与混音独立堆栈开始时完全相同,见下文:

export const sessionStorage = createCookieSessionStorage({
  cookie: {
    name: "__session",
    httpOnly: true,
    path: "/",
    sameSite: "lax",
    secrets: ["super-duper-s3cret"],
    secure: process.env.NODE_ENV === "production",
  },
});

export async function createUserSession({
  request,
  userId,
  remember,
  redirectTo,
}: {
  request: Request;
  userId: string;
  remember: boolean;
  redirectTo: string;
}) {
  const session = await getSession(request);
  session.set(USER_SESSION_KEY, userId);
  return redirect(redirectTo, {
    headers: {
      "Set-Cookie": await sessionStorage.commitSession(session, {
        maxAge: remember
          ? 60 * 60 * 24 * 7 // 7 days
          : undefined,
      }),
    },
  });
}

再次注意,我不确定这是混音问题还是Express问题,我使用的是带Express的混音。
请让我知道如果需要更多的细节!
先谢谢你!

bxpogfeg

bxpogfeg1#

createCookieSessionStorage的调用为会话cookie设置默认值。
当调用commitSession时,可以覆盖这些默认值。
确保没有将expiresmaxAge设置为默认值。

相关问题