赞
踩
from flask import make_response
res=make_response(render_template('home.html'))
res.set_cookie('name','lqz')
# delete_cookie
配置文件中可以修改 SESSION_COOKIE_NAME ; PERMANENT_SESSION_LIFETIME
from flask import Flask,session
app = Flask(__name__)
app.secret_key = 'ksdjklfsjdlfjks'
@app.route('/index/<int:pk>', methods=['get'], endpoint="index")
def index(pk):
session['name'] = "xxx"
return pk
session 直接导入,然后直接修改即可;最终会保存在浏览器的 cookie中,其中 key 默认为session ,可以通过app.config 进行修改
修改了session中相同的 key 的值之后,cookie 中存的session对应的值会发生改变
由于本质还是使用cookie,所以secret_key需要设置
当后端使用了
session[key]=value
之后,处理完请求的所有逻辑并返回响应时 ===> 将session对象 序列化成字符串再加密,然后将其放在 cookie 中返回;所以每次修改了session之后,返回的字符串都会改变,修改时重写了
__setitems__
方法;浏览器下次发送请求时,只要处于同一个域,就会自动将 cookie 携带传给后端; 后端就会将session对应的字符串 反序列化称为session对象,其底层使用的就是pickle;
Django 的处理是在 session 中间件中进行处理的;
在process_response中:
Django 会将 session 对应的值序列化存入session 表中,并且会得到一个 sessionid;
然后将sessionid 放在 cookie 中返回给前端,下次前端来会携带自动携带;在process_request中:
Django 取出 sessionid 到表中去比对,对比成功则反序列化成对象;
session.modified 其实就是修改了 session 对象的_ _ setitem_ _方法
# app.session_interface---> SecureCookieSessionInterface()类的对象 -open_session:请求来了,从cookie中取出字符串,把字符串反序列化成session对象 -save_session:请求走,把session对象,序列化成字符串,放到cookie中 # open_session def open_session(self, app, request): s = self.get_signing_serializer(app) if s is None: return None val = request.cookies.get(app.session_cookie_name) if not val: return self.session_class() max_age = total_seconds(app.permanent_session_lifetime) try: data = s.loads(val, max_age=max_age) return self.session_class(data) except BadSignature: return self.session_class() # save_session def save_session(self, app, session, response): domain = self.get_cookie_domain(app) path = self.get_cookie_path(app) if not session: if session.modified: "session.modified 其实就是修改了 session 对象的__setitem__方法" response.delete_cookie( app.session_cookie_name, domain=domain, path=path ) return if session.accessed: response.vary.add("Cookie") if not self.should_set_cookie(app, session): return httponly = self.get_cookie_httponly(app) secure = self.get_cookie_secure(app) samesite = self.get_cookie_samesite(app) expires = self.get_expiration_time(app, session) val = self.get_signing_serializer(app).dumps(dict(session)) response.set_cookie( app.session_cookie_name, val, expires=expires, httponly=httponly, domain=domain, path=path, secure=secure, samesite=samesite, )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。