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. nginx核心模块常用指令

    默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件,可以在启动nginx的时候,通过-c来指定要读取的配置文件 常见的配置文件有如下几个: nginx.conf: ...

  2. Git安装使用秘籍

    首先Git的功能,是用于帮助用户实现版本控制的软件,GIT一般和GitHub配套使用.Git是个软件,GitHub是个网站,它们的关系就像雷锋与雷峰塔一样,没什么关系.本文只提供Git安装方法,其它请 ...

  3. sublime 配置大全

    最近玩 python ,一般用的编译器是 pycharm ,功能强大,但是苦于启动速度遂准备换坑,瞄上了 sublime .这里记录一下 sublime 的设置以及坑爹项,需要注意的是我用的是 sub ...

  4. springboot 集成 dubbo(一)简介

    一.简介 1,springboot 是 一款快速开发的框架,减少了开发人员对配置文件的操作.采用一些注解来取代xml配置文件. 注解包含预先封装的注解和开发人员自定义注解.同时使用Maven.Grad ...

  5. SIP中的SDP offer/answer交换初探

    1.引言 SDP的offer/answer模型本身独立与于利用它的高层协议.SIP是使用offer/answer模型的应用之一.RFC 3264 定义了offer/answer模型,但没有规定使用哪个 ...

  6. SpringBoot项目的限流

    开发访问量比较大的系统是,爬虫的目的就是解决访问量大的问题:缓存穿透是为了保护后端数据库查询服务:计数服务解决了接近真实访问量以及数据库服务的压力. 架构图 限流 就拿十万博客来说,如果存在热点文章, ...

  7. 在Android8.0以上收不到广播问题(AppWidget)

    对Intent指定组件 //安卓8.0必须添加 intent.setComponent(new ComponentName(context,MyAppWidgetProvider.class)); 问 ...

  8. HTML的标签简单概括

    段落标签 <p></p> 属性  说明 值 align 对其方式 left(默认).right.center 水平线 <hr /> 属性  说明   值 width ...

  9. js获取图片内容上传

    <script> $('#pic').change(function(){ var size=document.getElementById('pic').files[0].size va ...

  10. MYSQL AND 和 OR

    AND 和 OR     如果你失忆了,希望你能想起曾经为了追求梦想的你.    QQ群:651080565(php/web 学习课堂)   我们查询数据的时候,会使用条件来过滤数据,达到筛选效果,过 ...