Django 5种类型Session使用方法解析


Posted in Python onApril 29, 2020

介绍

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

session是基于cookie完成的,当用户打开浏览器,去访问服务器的时候,服务器会为每个用户的浏览器创建一个会话对象(session对象),并且为每个session对象创建一个Jsessionid号。当session对象创建成功后,会以cookie的方式将这个Jsessionid号回写给浏览器,当用户再次进行访问服务器时,及带了具有Jsessionid号的cookie数据来一起访问服务器,服务器通过不同session的 Jsessionid号来找出与其相关联的session对象,通过不同的session对象来为不同的用户服务。

使用

Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密cookie

数据库Session

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
 
a. 配置 settings.py
 
  SESSION_ENGINE = 'django.contrib.sessions.backends.db'  # 引擎(默认)
   
  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,默认修改之后才保存(默认)
 
 
 
b. 使用
 
  def index(request):
    # 获取、设置、删除Session中数据
    request.session['k1']
    request.session.get('k1',None)
    request.session['k1'] = 123
    request.session.setdefault('k1',123) # 存在则不设置
    del request.session['k1']
 
    # 所有 键、值、键值对
    request.session.keys()
    request.session.values()
    request.session.items()

 # 3.0无下面3个方法
    request.session.iterkeys()
    request.session.itervalues()
    request.session.iteritems()
 
 
    # 用户session的随机字符串
    request.session.session_key
 
    # 将所有Session失效日期小于当前日期的数据删除
    request.session.clear_expired()
 
    # 检查 用户session的随机字符串 在数据库中是否
    request.session.exists("session_key")
 
    # 删除当前用户的所有Session数据
    request.session.delete("session_key")
    request.session.delete()
    request.session.flush()
 
    request.session.set_expiry(value)
      * 如果value是个整数,session会在些秒数后失效。
      * 如果value是个datatime或timedelta,session就会在这个时间后失效。
      * 如果value是0,用户关闭浏览器session就会失效。
      * 如果value是None,session会依赖全局session失效策略。

缓存Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
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,默认修改之后才保存

b. 使用

同上

文件Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() #

如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T

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,默认修改之后才保存

b. 使用

同上

缓存+数据库Session

数据库用于做持久化,缓存用于提高效率

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

b. 使用

同上

加密cookie Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

b. 使用

同上

登录状态验证

def login_status(func):
  def warp(request,*args,**kwargs):
    user = request.session.get("username")
    if user:
      kwargs["username"] = user
      return func(request,*args,**kwargs)
    return redirect(login)
  return warp

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
下载糗事百科的内容_python版
Dec 07 Python
跟老齐学Python之类的细节
Oct 13 Python
python自定义解析简单xml格式文件的方法
May 11 Python
python黑魔法之编码转换
Jan 25 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
Python_LDA实现方法详解
Oct 25 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
详解Python3 基本数据类型
Apr 19 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
python绘制BA无标度网络示例代码
Nov 21 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 #Python
Python退出时强制运行一段代码的实现方法
Apr 29 #Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 #Python
如何使用python切换hosts文件
Apr 29 #Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 #Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 #Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 #Python
You might like
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python中列表和元组的区别
2017/12/18 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
python实现词法分析器
2019/01/31 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
甜点店创业计划书
2014/01/27 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
我的中国心演讲稿
2014/09/04 职场文书
购房个人委托书范本
2014/10/11 职场文书
颐和园英文导游词
2015/01/30 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python