在本地主机上重新加载页面后cookies消失

问题描述 投票:0回答:2

当您进入网站时,Cookie 会被设置,一切正常,但是当您重新加载页面时,设置的 Cookie 会被删除

登录响应(返回):

    export const sendAccessTokenAndRefreshToken = (response:ServerResponse, accesstoken:string, refreshtoken:string) => {

    response.writeHead(200, {
        'Content-Type': 'text/json; application/json',
        "Access-Control-Allow-Credentials": "true",
        "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS",
        "Access-Control-Allow-Origin": "http://localhost:3000",
        "Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Authorization",
        'Set-Cookie':  [`refreshtoken=${refreshtoken}; Secure; HttpOnly; SameSite=None; Path=/; Max-Age=99999999;`]
       
    });

    response.end(JSON.stringify({accesstoken}));

}

响应选项(cors):

response.writeHead(200, {
    'Content-Type': 'text/json; application/json',
    "Access-Control-Allow-Credentials": "true",
    "Access-Control-Allow-Origin": "http://localhost:3000",
    "Access-Control-Expose-Headers": "Authorization",
    "Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Authorization",
});

response.end(JSON.stringify({message: 'Cors Work!'}));

登录完成后:

enter image description here

网站重新加载后:

enter image description here

在这张图片中,您可以看到发送 post 请求时,会显示 cookie,但重新启动后它会消失

enter image description here

前端登录.js:

    const body = {

    login: login_input.value,
    password: password_input.value

}

fetch('http://127.0.0.1:3000/login', {
    method: 'POST',
    mode: 'cors',
    headers: {
        'Content-Type': 'application/json'
    },
    credentials: 'include',
    body: JSON.stringify(body)
})
.then((response) => response.json())
.then((json) => {
    localStorage.setItem('token', json.accesstoken);

如何解决这个问题?我尝试使用 cors 浏览器扩展,但即使这样也没有帮助

如何在不借助无关框架的情况下解决这个问题?

javascript node.js typescript cookies cross-domain
2个回答
0
投票

我怀疑是在下面的代码中使用了 ' 和 ` 引号:

"Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Authorization", “设置 Cookie”:[

refreshtoken=${refreshtoken}; Secure; HttpOnly; SameSite=None; Path=/; Max-Age=99999999;
]

删除 '` 并删除 [],你也不应该拥有它。

类似:

"Set-Cookie":  "refreshtoken=${refreshtoken}; Secure; HttpOnly; SameSite=None; Path=/; Max-Age=99999999;"

那么将刷新令牌存储在 cookie 中是否是一个好主意,这是一个不同的问题,但这是一个不同的讨论。

为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:调试 cookie 问题


0
投票

如果 Cookie 没有过期日期,则该 Cookie 被视为会话 Cookie,刷新时会被清除。

另一个可能的原因是“HttpOnly”属性。每次用户关闭或刷新页面时,我的 Chrome 都会删除 HttpOnly cookie,即使 cookie 尚未过期。

© www.soinside.com 2019 - 2024. All rights reserved.