在网站中,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/
转载文章受原作者版权保护。转载请注明原作者出处!