转至原文  https://www.cnblogs.com/zhaof/p/6281468.html

基于cookie做用户验证时:敏感信息不适合放在cookie中

session依赖cookie

session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie中

3、    保存到session中

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session["username"]=user

这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations

python manage.py migrate

当用户登录的时候的就会在数据库的django_session表中记录session信息

同样的通过request.session["username"]也可以获取相应的值

在这个过程中:

1、    首先获取当前用户的随机字符串

2、    根据随机字符串获取对应的内容

session的操作

request.session["k1"]  如果不存在则会报错

request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)

request.session['k1'] = 123 设置session值

request.session.setdefault('k1',123)  存在则不设置

del request.session['k1']  删除

request.session.clear()    删除

所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

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.set_expiry(value)

默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

配置setting.py

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

Django中对于session的存储方式

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

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

1、    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

2、    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'       (引擎)

django session深入的更多相关文章

  1. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

  2. django session

    上周一个新的应用场景,带出来了关于django session管理的问题. 公司的另一个App以Widget的形式嵌入我们的页面,就是我们提供一些url,另一个App通过iframe的形式嵌入这些ur ...

  3. Redis+Django(Session,Cookie、Cache)的用户系统

    转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一 ...

  4. Django session相关操作

    Django session 是存储在数据库中的所以要先跟数据库建立连接 本连接有Django跟数据库建立连接的操作:https://www.cnblogs.com/Niuxingyu/p/10296 ...

  5. Django session 源码流程

    流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 dj ...

  6. Django - session 会话跟踪技术

    1.session简介 |session 英 /'seʃ(ə)n/ 美 /'sɛʃən/ 基于cookies开发,将值存到服务端 写session 读session Session是服务器端技术,利用 ...

  7. django session 使用案例

    django session 使用案例 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来 ...

  8. Django 2.0 学习(21):Django Session

    Django Session Session 与Cookie 1.简介 1.Cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们又需要"保持状态",因 ...

  9. Django Session配置

    Django Session的三种存储方式 SESSION_ENGINE='django.contrib.sessions.backends.db' # default 保存到数据库中,依赖 'dja ...

  10. Django session cookie 上传文件、详解

    session 在这里先说session 配置URL from django.conf.urls import patterns, include, url from django.contrib i ...

随机推荐

  1. nyoj--55--懒省事的小明(STL优先队列)

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分 ...

  2. vue中响应式props办法

    title: vue中响应式props办法 toc: false date: 2018-12-25 21:22:49 categories: Web tags: Vue 更新props数据时,使用th ...

  3. jquery的clone()引发的问题,下拉框点击没有反应

    此段代码是对某块元素的移位:上移.下移.对比修改前后的两段代码: 修改前: //点击移位 function move(obj,posi){ var al=$(obj).parent('li').par ...

  4. quartz.net定时任务框架详解

    C#做定时任务:一是Timer:而是Quartz.net:本文就学习一下Quartz.net框架 Quartz.net非常的灵活,开发人员能用很少的代码就能完成“每隔一小时执行”.“每天2点执行”.“ ...

  5. Django(part4)

    一个简单的form表单: #polls/templates/polls/detail.html<h1>{{ question.question_text }}</h1> {% ...

  6. 如何设置ASP.NET站点页面运行超时

    全局超时时间 服务器上如果有多个网站,希望统一设置一下超时时间,则需要设置 Machine.config 文件中的 ExecutionTimeout 属性值.Machine.config 文件位于 % ...

  7. oracle11g-rac安装部署

    网上11g rac安装文档大多不详细,今天来一个详细的! 纯操作文档,不喜勿喷!! 环境: 系统:rhel5.5 oracle:11.2.03 双网卡 共享磁盘 ip地址和主机名规划: #节点1 主机 ...

  8. Rx = Observables + LINQ + Schedulers

    The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using ...

  9. Python 批量处理特定格式文件

    #批量对文件夹下的'.mat'进行处理 def file_name(file_dir,suff): L=[] for root, dirs, files in os.walk(file_dir): f ...

  10. checkbox控制显示隐藏

    显示文本框<input type = "checkbox" id="checkbox" onclick="on_hide();"/&g ...