该弄懂的知识拖再久也躲不掉
django session 原理剖析
用户自定义settings的权限大于globalsetting
在经过中间件 'django.contrib.sessions.middleware.SessionMiddleware',以后
代码运行至SessionMiddleware类
实例化出self.SessionStore = engine.SessionStore
在request视图中
def process_request(self, request):
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)
request.session = self.SessionStore(session_key)
session_key取到session的随机字符串或者None
request.seesion 是将一个类
SessionStore的实例化对象
作为request的属性 session
故此得到 request.session是一个实例化的对象
self._session_key = session_key
self.accessed = False
self.modified = False
self.serializer = import_string(settings.SESSION_SERIALIZER)
那么在视图中 我们request.session['user_id']=user.pk究竟发生了什么呢
1.走__setitem__方法
self._session[key] = value
self.modified = True
两个赋值,其中最关键的是__session[key]
如果同一个浏览器 session_key 存在 则不会产生新的 key
如果用赋值的键值对发生改变那么
session Value 会改变
sessionkey | sessionvalue | request.session['key'] | 登录人 |
xpntaar5q7fwbeq83ov10qwa4h7mh2vc | 初始值 | 初始值 | 初始值 |
不变 | 变 | 不变 | 变 |
不变 | 变 | 变 | 不变 |
如果使用auther模块退出会删除整条session | |||
变 | 变 | 不变 | 不变 |
如果是自己的删除session操作del request.session[''user_id] | |||
不变 | 变 | ||