flask中的session

在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:

1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。

session是基于cookie实现的,保存在服务端的键值对,形式为{随机字符串:’xxxxxx’},同时在浏览器中的cookie中也会保存相同的随机字符串,用来再次请求时验证

注意:Flask中的session是保存在浏览器中的,默认的key是session(加密的cookie),当然也可以将其保存在数据库中

flask中有一个session对象,它允许你在不同请求间存储特定用户的信息。它是在cookie的基础上实现的,并且对cookie进行密钥签名要使用会话,你需要设置一个密钥,同request一样,session基于上下文管理

配置SECRET_KEY
因为flask的session是通过加密后保存在cookie中的,有加密就需要有解密用的密钥,所以只要用到了flask的session模块,就一定要配置’SECRET_KEY’。一般设置为24位的字符。

点击查看代码

#增
session['username']='helloWorld'
#查
result=session['key']       ###如果key不存在,会raise Error
result=session.get('key')   ###如果key不存在,返回None
#删
session.pop('key')
#清空session
session.clear

如果没有指定session的过期时间,默认是浏览器关闭以后就自动结束
session.permanent=True
在flask下可以将有效期延长至一个月
给app.config设置PERMANENT_SESSION_LIFETIME来更改有效期,这个值的数据类型是datetime.timedelta类型。在登陆网页界面的时候,有个’记住我’的选项,如果点击了就把session的有效期延长一些,使用的就是这个。前提是要session.permanent=True

点击查看代码

from flask import Flask,session
from datetime import timedelta
import os

app=Flask(__name__)

app.config['SECRET_KEY']=os.urandom(24)
session.permanent=True
app.config['PERMANENT_SESSION_LIFETIME']=datetime.timedelta(days=7)

原文链接:https://blog.csdn.net/zhangyukun555/article/details/88260582

点击查看代码

设置SECRET_KEY
class DefaultConfig(object):
    SECRET_KEY = os.urandom(24)
    # 设置session的有效时间为30分钟
    PERMANENT_SESSION_LIFETIME = timedelta(minutes=30)

将定义的参数导入进来
app.config.from_object(DefaultConfig)

@app.route('/set')
def hello_world():
    session.permanent = True  # 设置session的有效时间必须加上这句代码
    # 设置session
    session['un'] = 'libo'    # 这些都是保存在服务器内存里面的数据 sessionid再服务器也有浏览器也有
    session['pwd'] = '123456'
    session['user'] = User('libo','123456')
    return 'hello libo!'

@app.route('/get')
def get_cookie():
    un = session.get('un')
    pwd = session.get('pwd')
    user = session.get('user')
    print(un,pwd,user)
    return '获取session的值'
普通的类
class User(object):
    def __init__(self,xun,xpwd):
        self.username = xun
        self.password = xpwd

if __name__ == '__main__':
    app.run()

点击查看代码

session验证装饰器
def auth(func):
    @functools.wraps(func)
    def inner(*args, **kwargs):
        if not session.get('xxx'):
            return redirect('/user/login')
        return func(*args, **kwargs)
    return inner

Original: https://www.cnblogs.com/libonizhenshuai/p/15551897.html
Author: libonizhenshuai
Title: flask中的session

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/564334/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球