django:session会话控制

一,
当用户第一次访问某网站时,网站服务器就在内存中开辟一块空间来创建对象,用于在“无状态”的HTTP的长会话中存储用户信息 。能使用户在同一浏览器的不同页面间跳转时保持信息一致 。会在失效或过期时被清理 。主要的原理性内容可以参考网络爬虫基础知识:HTTP和HTTPS、和这篇博客 。
二,中的 1,默认的设置
默认开启 ,由 .py 中的'....'进行状态判断,并根据判断结果调用 .py中 的'..' 进行相关处理 。
默认情况下,将会话存储在数据库中(使用模型 ....),如下:
尽管这样做很方便,但在某些设置中,将会话数据存储在其他地方会更快,比如可以配置将会话数据存储在文件系统或缓存中 。通过在 .py 中设置来使用提供多种保存的方式:
1,默认使用数据库保存:
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
2,使用文件保存:
SESSION_ENGINE = 'django.contrib.sessions.backends.file'SESSION_FILE_PATH = '/MyProject'
3,使用缓存保存:
要使用的缓存系统存储会话数据,首先需要确保已经配置了缓存 。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'SESSION_CACHE_ALIAS = 'default' #设置缓存别名,默认内存缓存
4,使用缓存+数据库保存:
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
总之,只有在使用缓存后端时,才应该使用基于缓存的会话 。本地内存缓存后端保存数据的时间不够长,因此不是一个好的选择,直接使用文件或数据库会话比通过文件或数据库缓存后端发送所有内容更快 。此外,本地内存缓存后端不是多进程安全的,因此可能不是生产环境的好选择 。
5,使用形式保存:
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
6,与相关的其他配置:
SESSION_COOKIE_NAME = "sessionid"# Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)SESSION_COOKIE_PATH = "/"# Session的cookie保存的路径(默认)SESSION_COOKIE_DOMAIN = None# Session的cookie保存的域名(默认)SESSION_COOKIE_SECURE = False# 是否Https传输cookie(默认)SESSION_COOKIE_HTTPONLY = True# 是否Session的cookie只支持http传输(默认)SESSION_COOKIE_AGE = 1209600# Session的cookie失效日期(2周)(默认)SESSION_EXPIRE_AT_BROWSER_CLOSE = False# 是否关闭浏览器使得Session过期(默认)SESSION_SAVE_EVERY_REQUEST = False# 是否每次请求都保存Session,默认修改之后才保存(默认)
2,中的运行机制
1,以游客身份访问站点而未登录时,在的“检查”中可以发现,当前并没有生成对应的,说明一般情况下不会为游客创建 。
2,当登陆之后,被创建并保存在默认的数据表中:
【django:session会话控制】3,复制网站地址,用新窗口打开,即在登录状态下再次访问该网址,还是登陆状态,期间,浏览器先将本地发送到,获取其中的后与默认数据表中的进行比较,确定当前用户信息:
3,的读写操作
可理解为从中获取的一段dict格式的数据 。
1,获取:
获取session中VCode的数据,若VCode不存在则报错:request.session.['VCode']获取session中VCode的数据,若VCode不存在则为空:request.session.get('VCode', '')request.session.setdefault('VCode', '')