Django基础之Session
1. Session的由来
Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且它保存在服务器,有较高的安全性。这就是Session。
问题来了,基于HTTP协议的无状态特征,服务器根本就不知道访问者是“谁”,那么上述的Cookie就起到桥接的作用。
我们可以给每个客户端的Cookie分配一个唯一的id,这样用户在访问时,通过Cookie,服务器就知道来的人是“谁”。然后我们再根据不同的Cookie的id,在服务器上保存一段时间的私密资料,如“账号,密码等”。
总而言之:Cookie弥补了HTTP无状态的不足,让服务器知道来的人是“谁”,但是Cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过Cookie识别不同的用户,对应的在Session里保存私密的信息,以及超过4095字节的文本。
另外,上述所说的Cookie和Session其实是共通的东西,不限于语言和框架。
2. Django中Session相关方法
2.1 获取、设置、删除Session中数据
# 获取session值
request.session["k1"] # 获取session值
request.session.get("k1", None) # 设置Session
request.session["k1"] = 123 # 为session设置默认值
request.session.setdefault("k1", 123) # 删除Session中的数据
del request.session["k1"]
2.2 所有键,值,键值对
# session中的所有键
request.session.keys() # session中的所有值
request.session.values() # session中的所有键值对
request.session.items() # session中的可迭代的键
request.session.iterkeys() # session中的可迭代的值
request.session.itervalues() # session中的可迭代键值对
request.session.iteritems()
2.3 会话session的key
request.session.session_key
2.4 将所有session失效日期小于当前日期的数据删除
request.session.clear_expired()
2.5 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
2.6 删除当前会话的所有session数据
request.session.delete()
2.7 删除当前的会话数据并删除会话的Cookie
request.session.flush()
这用于确保前面的会话数据不可以再次被用户的浏览器访问。
例如:django.contrib.auth.logout()函数中就会调用它。
2.8 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
- 如果value是个整数,session会在value秒后失效。
- 如果value是个datetime或timedelta,session就会在这个时间后失效。
- 如果value是0,用户关闭浏览器session就会失效
- 如果value是None,session会依赖全局session失效策略
3. Session流程解析

4. Django中的Session配置
Django中默认支持Sessin,其内部提供了5种类型的Session供开发者使用。
4.1 数据库Session
# 引擎(默认)
SESSION_ENGINE = "django.contrib.sessions.backends.db"
4.2 缓存Session
# 引擎
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
SESSION_CACHE_ALLAS = "default"
4.3 文件Session
# 引擎
SESSION_ENGINE = "django.contrib.sessions.backends.file"
# 缓存引擎路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
SESSION_FILE_PATH = None
4.4 缓存+数据库
# 引擎
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
4.5 加密Cookie Session
# 引擎
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
4.6 其他公用设置项
# session的cookie保存在浏览器上时的key, 即sessionid = 随机字符串(默认)
SESSION_COOKIE_NAME = "sessionid" # session的cookie保存的路径(默认)
SESSION_COOKIE_PATH = "/" # session的cookie保存的域名(默认)
SESSION_COOKIE_DOMAIN = None # 是否Https传输
SESSION_COOKIE_SECURE = True # 是否session的cookie只支持http传输(默认)
SESSION_COOKIE_HTTPONLY = True # session的cookie失效日期(2周)(默认)
SESSION_COOKIE_AGE = 1209600 # 是否关闭浏览器是的Session过期(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否每次请求都保存session,默认修改之后才保存(默认)
SESSION_SAVE_EVERY_REQUEST = False
Django基础之Session的更多相关文章
- Django基础之Session操作
1. 创建一个示例 1.1 第一步 首先创建一个django项目,创建app01, 连接数据库,做好准备工作. 然后在templates目录下创建两个html: login.html负责登录页面: b ...
- Django基础之Session版登录验证
from functools import wraps def check_login(func): @wraps(func) def inner(request, *args, **kwargs): ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- Django基础cookie和session
Django基础cookie和session 1.会话跟踪 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...
- day 62.3 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...
- day 73 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...
- Django基础六之cookie和session
Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...
- django基础 -- 8.cookie 和 session
一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...
- Django基础八之cookie和session
一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...
随机推荐
- 怎样启动和关闭nginx服务器
启动: 直接使用命令: nginx nginx 关闭1: 快速停止 nginx -s stop 关闭2: 完整有序停止 nginx -s quit 重启: 如下 nginx -s reload
- windows phone 下拉刷新
在windows phone 中采用数据列表时为了保证用户体验常遇到加载数据的问题.这个问题普遍到只要你用到数据列表就要早晚面对这个问题. 很多人会说这个问题已经有解决方案. 其实真正问题并不在于如何 ...
- python 拟合曲线并求参
需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布, 所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线. python的scipy.optimize包里的curve_fit函数来 ...
- asp.net frameworke处理程序的作用
1 向客户端发送响应的工作都由处理程序完成 2 任何实现System.web.ihttpHandler接口的类都可以作为传入的http请求的目标 3 如果需要重复使用自定义处理程序对象,需要创建自定义 ...
- Spring cloud实战——服务提供者
目录讲解: 一.服务提供者与服务消费者的概念 二.编写一个服务提供者的测试类(code) 1.1. 使用微服务构建的是分布式系统,微服务之间通过网络进行通信.我们使用微服务提供者与服务消费者来描述微服 ...
- world 页面横向
今天浏览world时,发现一个现象: 出现的页面比较宽,如何做的呢? 操作如下: 1.打开一个新的world 2.选择布局页签,分隔符,分节符的下一页 3.鼠标放到第二页上,选择页签布局,纸张方向,选 ...
- Computer Vision_1_Active Appearance Models :Active Appearance Models——1998
此为计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面. 1. Active Appearance Models 活动表观模型和活动轮廓模型基本思想来源 Snake,现在 ...
- TAP/TUN浅析
转:http://www.cnblogs.com/yml435/p/5917628.html 参考链接:https://www.ibm.com/developerworks/cn/linux/1310 ...
- Django框架起步
一.环境安装 二.创建项目 三.项目目录 四.创建项目应用 五.应用目录 六.第一个响应 七.第一个模板页面 八.第一个重定向 九.url应用移植 十.多应用相同模板页面冲突 十一.静态资源的配置 十 ...
- 06_Hive分桶机制及其作用
1.Clustered By 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分. Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后 ...