项目上线cookie携带问题

问题描述:

上线时,通过IP进行访问,没有丝毫问题,但是通过域名访问就出现了能成功登录,但是后续又会直接跳出去,说我没有登录。


问题分析:

第一步:考虑是不是cookie携带失败,确实失败了,当时就一直思考为什么无法成功携带cookie.

如果是这样的,不妨点开,看看自己的cookie看看

如上图,空空如也。

这时,就应该考虑cookie设置失败,这时我又点开了我的login请求,仔细观察响应请求

看看你的第一个login请求,响应标头中,是不是有这样一个感叹号

长话短说:这是由于浏览器为了防止跨站攻击,将sameSite设置为了lax,导致访问第三方时候,无法设置cookie


解决方案:

具体可以参考这个链接: samesite解决方案

方案一:后端将samesite设置为none,具体需要一个sessionconfig



方案二:使用Nginx使用代理,让前后端域名和端口保持一致(ps:可以参考鱼皮配置代理)

因为我一直想使用一下nginx,所以我就采用了方案二。

第一步:修改前端axios请求地址,让他向nginx服务器进行请求。

//使用Nginx反向代理
const myAxios = axios.create({
// baseURL: '/api',
baseURL: isDev==='development' ? 'http://localhost:7529/api' : 'http://api.tianzhao.icu/api',
timeout: 100000,
});

myAxios.defaults.withCredentials = true;//允许跨域携带cookie信息

第二步:修改nginx,让他接收到前端的请求后,将请求转发向真正的后端

server
{
listen 12345;
server_name 112.74.38.121;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/112.74.38.121/api-front/dist;
# 代理拦截,向真正的后端进行请求
location /api {
proxy_pass http://localhost:7529/api/;
}
}



0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
照
下载 APP