Flask解决1、同域名不同端口号的应用登录状态冲突问题,2、关闭浏览器后保持登录状态问题

1、同域名不同端口号的多个应用会共享浏览器的cookie,导致其登录状态冲突。

解决方法:

在flask中为每个应用设置不同的session名称

app.config["SESSION_COOKIE_NAME"] = 'my-session:'

2、关闭浏览器后保持登录状态

# 保持登录,默认就是True
# app.config["SESSION_PERMANENT"] = True
# 默认31天
app.config["PERMANENT_SESSION_LIFETIME"] = 24*60*60
 
 
# 登录成功后使用session记录用户信息
session["username"] = user.get("username")
# 关闭浏览器后保持登录
session.permanent = True

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Flask 中带有状态保持登录和注册功能,可以结合使用会话(session)和数据库来实现。 首先,您需要设置一个密钥(secret key)来加密会话数据,可以在 Flask 应用中进行如下设置: ```python from flask import Flask app = Flask(__name__) app.secret_key = 'your_secret_key_here' ``` 接下来,您需要创建一个用户数据库,并在注册和登录功能中进行相关操作。这里以使用 SQLite 数据库为例: ```python import sqlite3 from flask import Flask, request, session, redirect, url_for, render_template app = Flask(__name__) app.secret_key = 'your_secret_key_here' # 连接到数据库 conn = sqlite3.connect('users.db') c = conn.cursor() # 创建用户表 c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL)''') conn.commit() @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': # 获取注册表单数据 username = request.form['username'] password = request.form['password'] # 检查用户名是否已存在 c.execute('SELECT * FROM users WHERE username=?', (username,)) existing_user = c.fetchone() if existing_user: return 'Username already exists!' # 插入新用户到数据库 c.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password)) conn.commit() return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': # 获取登录表单数据 username = request.form['username'] password = request.form['password'] # 检查用户名和密码是否匹配 c.execute('SELECT * FROM users WHERE username=? AND password=?', (username, password)) user = c.fetchone() if user: # 将用户信息存储到会话中 session['username'] = username return redirect(url_for('profile')) else: return 'Invalid username or password!' return render_template('login.html') @app.route('/profile') def profile(): # 检查用户是否已登录 if 'username' in session: return f"Welcome, {session['username']}!" else: return redirect(url_for('login')) @app.route('/logout') def logout(): # 清除会话数据 session.clear() return redirect(url_for('login')) if __name__ == '__main__': app.run() ``` 上述代码中,`register` 路由处理函数用于处理用户注册,`login` 路由处理函数用于处理用户登录,`profile` 路由处理函数用于显示用户个人资料。在登录成功后,会将用户名存储到会话中,以便在其他页面中进行状态保持。`logout` 路由处理函数用于注销用户并清除会话数据。 通过以上实现,您可以在 Flask 应用中实现带有状态保持登录和注册功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值