问题是这样的:
我和小伙伴一块写了一个项目,然后他用vue写的前端我用flask写的接口,本地测试的时候完全没有问题,但是当我把两个项目部署到同一台服务器上时(已经解决跨域问题),发生了一个没有想到的问题,登录注册啥的都可以实现,但是注销不生效,截图如下:
注销接口代码如下:
@app.route('/api/login/out', methods=['GET', 'POST'])
def login_out():
try:
username = session.get('username')
except:
username = ''
if username:
try:
session.pop('username', None)
# session['username']=None
# print(username)
# username=session['username']
record_log(log_user=str(username), log_text=str(username) + '用户注销成功')
# del session[username]
print(session.get('username'))
return {'state': 1}
except Exception as e:
# print(e)
# username=session['username']
record_log(log_user=str(username), log_text=str(username) + '用户注销失败')
return {'state': 0}
else:
record_log(log_user='/api/login/out', log_text='无用户尝试登陆')
return {'state': -1}
获取session代码如下:
# TODO 获取当前用户的登录状态
@app.route('/api/login/session', methods=['GET', 'POST'])
def login_session():
record_log(log_user='/api/login/session', log_text='尝试使用session登录')
username = session.get('username')
print(username)
if username:
record_log(log_user=username, log_text=username + '用户尝试使用session登录成功')
return {'state': 1, 'username': username}
else:
record_log(log_user='/api/login/session无session', log_text='用户尝试使用session登录失败')
return {'state': 0, 'username': ''}
这个注销的里面有打印,后端打印如下:
不知道为什么命名已经注销了,后端也看是None,然后又有值了,session存储到了redis中,session的配置如下:
# redis 配置 session 存储到redis中
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = Redis(
host=app.config.get('REDIS_HOST'),
port=app.config.get('REDIS_PORT'),
db=app.config.get('REDIS_DB_SESSION'),
password=app.config.get('REDIS_PASSWORD', None),
# decode_responses=app.config.get('REDIS_DECODE_RESPONSES')
)
app.config['SESSION_USE_SIGNER'] = False # 加密混淆
app.config['SECRET_KEY'] = app.config.get('FLASK_SECRET_KEY', 'QUihvLWabm0rJ9aFkHik') # 加密必须设置
app.config['SESSION_PERMANENT'] = True # 设置是否长期有效 False则关闭浏览器失效 True则长期有效
app.config['PERMANENT_SESSION_LIFETIME'] = 3600 # 长期有效 设置过期时间 单位为秒 默认大概不到3小时
Session(app)
希望大家可以帮忙解决一下。