Flask 会话技术 cookies原理

发布时间 2023-06-01 15:43:56作者: ji哩咕噜

cookies

# 首页
@blue.route('/')
@blue.route('/home/') # 装饰器可以用多个,这两个路由都能访问到home函数
def home()
    # 4. 获取cookie
    username = request.cookies.get('user')
    return render_template('home.html', username =username)

# 登陆
@blue.route('/login/', method = ['GET', 'POST'])
def login():
    # GET: 访问登陆页面
    if request.method == 'GET':
        return render_template('login.html')
    
    # POST: 实现登录功能
    elif request.method == 'POST':
        pass
        # 1. 获取前端提交过来的数据
        username = request.form.get('username')
        password = request.form.get('username')
        
        # 2. 模拟登陆: 用户名和密码验证
        if username=='lisi', and password=='123':
            # 登陆成功
            response = redirect('/home/')
            
            # 3. 设置cookie
            #    cookie不能用中文
            # response.set_cookie('user', username)  # 默认浏览器关闭则 cookie失效
            #   过期时间:
            #   max_age: 秒
            #   expires: 指定的datetime日期
            # response.set_cookie('user', username, max_age=3600*24*7)
             response.set_cookie('user', username, expires=datetime.datetime(2023,12,12)
            
             return response 
            
        else:
            return '用户名或密码错误!'
                                 
# 注销
@blue.route('/logout/')
def logout():
   response = redirect('/home/')    # 用户点注销的时候需要重定向页面,重新走到登陆函数去获取cookie,没有获取到就到登陆页面                         
   # 5. 删除cookie 
   response.delete_cookie('user')
                                 
    return response

源码:

  key、value、过期时间二选一,三者必填

 

session

# 服务器端回话技术,依赖于cookie
特点:
    - 服务端的回话技术
    - 所有数据存储在服务器中
    - 默认存储在内存中
    - 存储结构也是key-value形式,键值对
    - session 是离不开cookie的
    
Flask中的session是全局对象
(之前的request也是Flask的一个全局对象)

常用操作:
    设置session
         session['key'] = 'value'
        
    获取session
        session.get(key, default=None)根据键获取会话的值
        
    删除session
        session.pop(key) 删除某一值
        session.clear()  清除所有  慎用,会全清空
    

 

 

# 首页
@blue.route('/')
@blue.route('/home/') # 装饰器可以用多个,这两个路由都能访问到home函数
def home()
    # 获取session
    username = session.get('user') 
    return render_template('home.html', username =username)

# 登陆
@blue.route('/login/', method = ['GET', 'POST'])
def login():
    # GET: 访问登陆页面
    if request.method == 'GET':
        return render_template('login.html')
    
    # POST: 实现登录功能
    elif request.method == 'POST':
        pass
        # 1. 获取前端提交过来的数据
        username = request.form.get('username')
        password = request.form.get('username')
        
        # 2. 模拟登陆: 用户名和密码验证
        if username=='lisi', and password=='123':
            # 登陆成功
            response = redirect('/home/')
            
            # 设置sesssion
            session['user'] = username
            session.permanent = True  # 让session的过期时间生效
            
             return response 
            
        else:
            return '用户名或密码错误!'
                                 
# 注销
@blue.route('/logout/')
def logout():
   response = redirect('/home/')    # 用户点注销的时候需要重定向页面,重新走到登陆函数去获取cookie,没有获取到就到登陆页面                         
   # 删除session
   session.pop('user')                              
                                 
    return response

还需要在init.py 进行session的配置

print(app.config)  # flask配置信息

app.config['SECREY_KEY'] = 'abc123'  # 用于加密

# 设置session过期时间
app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(days=31)

cookie和session的区别

cookie:

  1,在浏览器存储

  2,安全性较低

  3,可以讲清服务器压力

session:

  1,在服务器端存存储

  2,安全性高

  3,对服务器要求较高

  4,依赖cookie