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的更多相关文章

  1. Django基础之Session操作

    1. 创建一个示例 1.1 第一步 首先创建一个django项目,创建app01, 连接数据库,做好准备工作. 然后在templates目录下创建两个html: login.html负责登录页面: b ...

  2. Django基础之Session版登录验证

    from functools import wraps def check_login(func): @wraps(func) def inner(request, *args, **kwargs): ...

  3. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  4. Django基础cookie和session

    Django基础cookie和session 1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...

  5. day 62.3 Django基础八之cookie和session

    Django基础八之cookie和session   本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...

  6. day 73 Django基础八之cookie和session

      Django基础八之cookie和session   本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...

  7. Django基础六之cookie和session

    Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...

  8. django基础 -- 8.cookie 和 session

    一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...

  9. Django基础八之cookie和session

    一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...

随机推荐

  1. Wannafly挑战赛22

    B. 字符路径 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符,问图上有几条路径满足路径上经过的边上的字符组成的的字符串去掉空格后以大写字母开头,句号 '.' ...

  2. javascript——onsubmit和onreset事件 和开发中常用的方式

    <head> <meta charset="UTF-8"> <title></title> <script> funct ...

  3. php--正则(手机号码)

    PHP手机号码正则表达式 php用正则表达式判断手机号码的写法:从文章中匹配出所有的手机号就可以preg_match_all(),如果要检查用户输入的手机号是否正确可这样来检查:preg_match( ...

  4. 关于Mybatis的几件小事(一)

    一.Mybatis简介 1.Mybatis简介 MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. M ...

  5. js重点——作用域——内部原理(二)

    本篇是深入分析和理解作用域的第一篇——内部原理和工作模型. 我们知道作用域是变量,对象,函数可访问的一个范围.这说明了我们需要一套良好的规则来存储变量,之后方便查找.所以我们首先要理解的是在哪里而且怎 ...

  6. nuxt项目打包上线之二

    之前写过一篇nuxt打包上线的文章,请看这里:https://www.cnblogs.com/daisygogogo/p/11218809.html 上一篇文章的部署流程有点不好的地方,就是它适用于只 ...

  7. 【3】Kafka安装及部署

    一.环境准备 Linux操作系统 Java运行环境(1.6或以上) zookeeper 集群环境,可参照Zookeeper集群部署 . 服务器列表: 配置主机名映射. vi /etc/hosts ## ...

  8. css 制作一个点

    aside li a:before { content: ''; display: inline-block; width: 4px; height: 4px; background-color: # ...

  9. CDH5.16.1的agent启动报错:ERROR Error, CM server guid updated, expected d9bcadb4-f983-41b8-a667-66760f47bc91, received a67f5efa-8473-4f6a-94d6-231d1f432ef0

    1 详细错误 0/Oct/2019 14:56:13 +0000] 28577 MainThread agent ERROR Error, CM server guid updated, expect ...

  10. 原生js制作播放器

    以前 就想做一个播放器,一直没狠下心来,今天终于狠下心来,把这个做出来了(因为有点无聊) 做这个播放器  也百度了一下, 你叫我做,我肯定做不出来, 就算用jquery  我也做不出来. 以前也用过a ...