项目用的技术:vue+flask+mysql
部署到iis上
登录页核心JS:
this.axios
.post("http://127.0.0.1:5000/userlogin", this.qs.stringify(data))
.then((res) => {
...
},
后端核心Python代码:
if user:
session['jk_user'] = tel
session['jk_token'] = f"{str(request.user_agent)}_{request.remote_addr}"
# 设置过期时间
if isrem == "true":
session.permanent = True
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=60)
return jsonify({"res": "ok"})
else:
return jsonify({"res": "用户名或密码错误"})
问题:
用http://127.0.0.1:5000/userlogin时,登录状态可以保存,即客户端有对应的cookie值。
现在项目上线后,把后端接口地址换成正式的地址后:http://正式域名:5000/userlogin,客户端没有对应的cookie值,登录状态不能保存。
网上很多地址说这样设置,但是还是没有效果:
app.config["SESSION_COOKIE_SECURE"] = True
app.config["SESSION_COOKIE_SAMESITE"] = "None"
你的意思是 http://127.0.0.1:5000/userlogin
到 http://域名:5000/userlogin
只有IP替换为域名,其他接口访问及操作都是正常的?
例如资源访问、请求啥的,iis部署没接触过;
你看下 https://blog.csdn.net/u012869793/article/details/84453193 这个有没有启发
访问数据没有问题,就是session设置的登陆状态,也就是客户端没有cookie了
@〆灬丶: 你发的文章这个是flask部署到iis上,我项目已经部署好了,就是接口地址换成正式地址后,登陆状态,没有了。
@ruanmou: 那就不知道了,好久没用 session、cookie 这些了 现在常用的是 1.简单令牌 2.oauth2机制
如果配置环境之类没有变化,我还是觉得是域名处理之类的地方有问题,之前都是排查 Nginx 配置,iis 没玩过;如果你最后还是没找到问题,就只能看下相关函数的源码了
@ruanmou: 楼下的答复给了我一点启发
你提问的测试都是基于 js 的吗?有没有试过客户端浏览器;其次,你可以单独写一个接口验证下是不是 set_cookie 相关的操作都无效,而不单单是登录状态
resp = make_response('this is to set cookie')
resp.set_cookie('username', '#test#')
return resp
代码没贴全还是真的没有set_cookie()
用户首次登陆后,浏览器并不会自动设置cookie,需要在响应对象里设置cookie,这样浏览器才会记录。你的代码里暂时只看到了session,session是服务端使用的,需要与cookie配合使用。
flask里面 Session实际上就是一个加密的Cookie,存在客户端的。你可以自己试试。
cookie里需要验证用户信息?