赞
踩
Session
:与cookie
功能效果相同。
Session
与Cookie
的区别在于Session
是记录在服务端的,而Cookie
是记录在客户端的。
当访问服务器某个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做
session
,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思是,只允许当前这个session
对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session
的话,就会再启一个属于自己的session
。
如何知道浏览器和这个服务器中的session
是一一对应的呢?又如何保证不会去访问其它的session
呢?
当访问一个页面的时候给浏览器创建一个独一无二的号码,也给同时创建的
session
赋予同样的号码。这样就可以在打开同一个网站的第二个页面时获取到第一个页面中session
保留下来的对应信息(理解:当访问第二个页面时将号码同时传递到第二个页面。找到对应的session
)。这个号码也叫sessionID
(签名),session
的ID
号码或者签名是独一无二的。
session
的两种传递方式:
第一种通过cookies
实现。
当客户端进行第一次请求时,客户端的
HTTP request
(cookie
为空)到服务端,服务端创建session
,视图函数根据form
表单填写session
,请求结束时,session
内容填写入response
的cookie
中并返回给客户端,客户端的cookie
中便保存了用户的数据。
第二种通过URL
重写来实现。
当同一客户端再次请求时, 客户端的
HTTP request
中cookie
已经携带数据,此时cookies
不为空, 获取cookie
的有效时长,如果cookie
依然有效,通过与写入时同样的签名算法将cookie
中的值解密出来,若cookie
已经失效,则返回空。 再根据解密出来的内容判断服务器中是否存在对应的值。
注意:在Flask
中Session
的签名算法是:HMAC
和 SHA1
算法。
SECRET_KEY
import os
class DefaultConfig(object):
SECRET_KEY = os.urandom(16)
app.config.from_object(DefaultConfig)
session
from flask import session
@app.route('/session')
def setSession():
# 设置session
session['username'] = 'sanHa'
session['password'] = 'root'
return 'set session ok'
session
from flask import session
# 读取session
@app.route('/get')
def getSession():
username = session.get('username')
password = session.get('password')
return 'username:{}, password:{}'.format(username, password)
session
处理自定义对象from flask.json import JSONEncoder # JSONEncoder默认不支持把自定义对象变成JSON格式 # 自定义一个JSONEncode class MyJSONEncode(JSONEncoder): # 重写default方法 def default(self, obj): # 若果对象是user类型,转换为JSON格式 if isinstance(obj, User): return { 'un': obj.un, 'pwd': obj.pwd } else: # 其它不是User类型的默认交给JSONEncoder处理 JSONEncoder.default(obj) # 设置当前JSONencode app.json_encoder = MyJSONEncode # 自定义实例类 class User(object): def __init__(self, un, pwd): self.un = un self.pwd = pwd
# 设置session
@app.route('/session')
def setSession():
session['user'] = User('root', 'root')
return 'set session ok'
# 读取session
@app.route('/get')
def getSession():
user = session.get('user')
print(user)
return '读取session成功'
注意:session
的默认有效时间是:浏览器关闭后失效。
通过session.permanent = True
设置session
的有效时间为31
天。
设置session
(会话)有效时长为30
分钟
# 默认配置
class DefaultConfig(object):
# 设置session(会话)有效时长为30分钟
PERMANENT_SESSION_LIFETIME = datetime.timedelta(minutes=30)
# 注册
app.config.from_object(DefaultConfig)
@app.route('/session')
def setSession():
# 设置session
session.permanent = True
return 'set session ok'
session
时长设置成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。