Cookie 未在 Scala Play 中设置
Cookie not setting in Scala Play
我试图在使用 scala play 框架时根据响应设置 cookie。我正在创建一个名为 session 的 cookie,它的值是一个 UUID(我知道 play 有它自己的 session 管理)。
我可以看到响应 header 包含设置 cookie 指令,但 cookie 未设置。
下面是设置cookie的控制器中action中的scala代码
val cookie= Cookie("session",
sessionToken,
httpOnly=true,
sameSite=Some(Cookie.SameSite.Lax))
Ok(Json.toJson(res))
.withCookies(cookie)
// Also tried with .bakeCookies() after the withCookies() call
我可以在 FireFox 和 Chrome 的响应中看到 cookie header。他们都在其开发人员工具中各自的响应 cookie 查看器中显示了看似正确格式的 cookie。
Set-Cookie: session=c0174ed1-ebd3-4a8d-a5b2-5b09a3fe616b; SameSite=Lax; Path=/; HTTPOnly
但是,在这两种浏览器中都没有设置 cookie。我试过 true 和 false httpOnly,并弄乱了 maxAge 值。我尝试将域设置为 url,然后在主机文件 as suggested here.
中设置 url
反应前端的 URL 是
http://localhost:49161/login/hydrate
而游戏中的终点是
http://localhost:49162/user/login/rehydrate
我也尝试在 cookie
上将路径设置为 /login/hydrate/
前端的react代码
// Inside async function
// methodStrings[method] = "post" in this request
axios[methodStrings[method]](url, params)
.then(result => {
resolve(result);
})
.catch(err => {
console.error(`Error with request to ${url} - ${err}`);
reject(err.response.status);
});
然后我console.log等待请求的结果
问题出在 axios(and/or 浏览器)中。
基于此问题Cookies headers are present but Cookies are not stored in browser #1553您需要设置 withCredentials Axios 配置以在请求后在浏览器中存储 cookie:
axios.post('domain.com', {
name: 'name',
password: 'password'
}, {
//AxiosRequestConfig parameter
withCredentials: true //correct
})
我试图在使用 scala play 框架时根据响应设置 cookie。我正在创建一个名为 session 的 cookie,它的值是一个 UUID(我知道 play 有它自己的 session 管理)。 我可以看到响应 header 包含设置 cookie 指令,但 cookie 未设置。
下面是设置cookie的控制器中action中的scala代码
val cookie= Cookie("session",
sessionToken,
httpOnly=true,
sameSite=Some(Cookie.SameSite.Lax))
Ok(Json.toJson(res))
.withCookies(cookie)
// Also tried with .bakeCookies() after the withCookies() call
我可以在 FireFox 和 Chrome 的响应中看到 cookie header。他们都在其开发人员工具中各自的响应 cookie 查看器中显示了看似正确格式的 cookie。
Set-Cookie: session=c0174ed1-ebd3-4a8d-a5b2-5b09a3fe616b; SameSite=Lax; Path=/; HTTPOnly
但是,在这两种浏览器中都没有设置 cookie。我试过 true 和 false httpOnly,并弄乱了 maxAge 值。我尝试将域设置为 url,然后在主机文件 as suggested here.
中设置 url反应前端的 URL 是
http://localhost:49161/login/hydrate
而游戏中的终点是
http://localhost:49162/user/login/rehydrate
我也尝试在 cookie
上将路径设置为 /login/hydrate/前端的react代码
// Inside async function
// methodStrings[method] = "post" in this request
axios[methodStrings[method]](url, params)
.then(result => {
resolve(result);
})
.catch(err => {
console.error(`Error with request to ${url} - ${err}`);
reject(err.response.status);
});
然后我console.log等待请求的结果
问题出在 axios(and/or 浏览器)中。
基于此问题Cookies headers are present but Cookies are not stored in browser #1553您需要设置 withCredentials Axios 配置以在请求后在浏览器中存储 cookie:
axios.post('domain.com', {
name: 'name',
password: 'password'
}, {
//AxiosRequestConfig parameter
withCredentials: true //correct
})