Cookie

1.1获取Cookie

  1. request.COOKIES["key"]
  2. request.get_signed_cookie(key,default=RAISE_ERROR, salt='', max_age=None)
  3. """
  4. 参数:
  5. default: 默认值
  6. salt: 加密盐
  7. max_age: 后台控制过期时间
  8. """

1.2设置Cookie

  1. rep = HttpRespanse(...) rep = render(reques,...)
  2. rep.set_cookie(key,value,...)
  3. rep.set_signed_cookie(key,value,salt='加密盐',...)
  4. """
  5. 参数:
  6. key, 键
  7. value='', 值
  8. max_age=None, 超时时间
  9. expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
  10. path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
  11. domain=None, Cookie生效的域名
  12. secure=False, https传输
  13. httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
  14. """

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

  1. <script src='/static/js/jquery.cookie.js'></script>
  2. $.cookie("list_pager_num", 30,{ path: '/' });

Session

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

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

1、数据库Session

  1. Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
  2. a. 配置 settings.py
  3. SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
  4. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
  5. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径(默认)
  6. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
  7. SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
  8. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
  9. SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
  10. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
  11. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
  12. b. 使用
  13. def index(request):
  14. # 获取、设置、删除Session中数据
  15. request.session['k1']
  16. request.session.get('k1',None)
  17. request.session['k1'] = 123
  18. request.session.setdefault('k1',123) # 存在则不设置
  19. del request.session['k1']
  20. # 所有 键、值、键值对
  21. request.session.keys()
  22. request.session.values()
  23. request.session.items()
  24. request.session.iterkeys()
  25. request.session.itervalues()
  26. request.session.iteritems()
  27. # 用户session的随机字符串
  28. request.session.session_key
  29. # 将所有Session失效日期小于当前日期的数据删除
  30. request.session.clear_expired()
  31. # 检查 用户session的随机字符串 在数据库中是否
  32. request.session.exists("session_key")
  33. # 删除当前用户的所有Session数据
  34. request.session.delete("session_key")
  35. request.session.set_expiry(value)
  36. * 如果value是个整数,session会在些秒数后失效。
  37. * 如果value是个datatimetimedeltasession就会在这个时间后失效。
  38. * 如果value0,用户关闭浏览器session就会失效。
  39. * 如果valueNone,session会依赖全局session失效策略。

2、缓存Session

  1. a. 配置 settings.py
  2. SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
  3. SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
  4. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
  5. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径
  6. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
  7. SESSION_COOKIE_SECURE = False # 是否Https传输cookie
  8. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
  9. SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
  10. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
  11. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
  12. b. 使用
  13. 同上

3、文件Session

  1. a. 配置 settings.py
  2. SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
  3. SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
  4. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
  5. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径
  6. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
  7. SESSION_COOKIE_SECURE = False # 是否Https传输cookie
  8. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
  9. SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
  10. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
  11. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
  12. b. 使用
  13. 同上

4、缓存+数据库Session

  1. 数据库用于做持久化,缓存用于提高效率
  2. a. 配置 settings.py
  3. SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
  4. b. 使用
  5. 同上

5、加密cookie Session

  1. a. 配置 settings.py
  2. SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
  3. b. 使用
  4. 同上

更多参考:猛击这里猛击这里

扩展:Session用户验证

  1. def login(func):
  2. def wrap(request, *args, **kwargs):
  3. # 如果未登陆,跳转到指定页面
  4. if request.path == '/test/':
  5. return redirect('http://www.baidu.com')
  6. return func(request, *args, **kwargs)
  7. return wrap

python Django中的cookie和session的更多相关文章

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

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

  2. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  3. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  4. Django中的Cookie、Session、Token

    Cookie : 指望着为了辨别用户身份.进行会话跟踪而存储在用户本地的数据(通常经过加密),是由服务端生成,发送给客户端浏览器,浏览器会将Cookie以key/value保存,下一请求同一网站是就发 ...

  5. Django中的cookie与session

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

  6. Django中的cookie和session

    前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ...

  7. 【转】Django中的cookie与session

    转自:https://www.cnblogs.com/chenchao1990/p/5283725.html cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空 ...

  8. 如何使用django中的cookie和session?

    1.Cookie 介绍 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Co ...

  9. Django中的Cookie和Session操作以及CBV

    1.Cookie 平常我们在浏览网页的时候,在需要输入密码的地方,如果已经登陆了一次,并且时间间隔比较近的话,是不需要登陆的,为什么了?这就是Cookie的作用. Cookie(或Cookies)指某 ...

随机推荐

  1. CodeForces 669 E Little Artem and Time Machine CDQ分治

    题目传送门 题意:现在有3种操作, 1 t x 在t秒往multiset里面插入一个x 2 t x 在t秒从multiset里面删除一个x 3 t x 在t秒查询multiset里面有多少x 事情是按 ...

  2. BZOJ 1036: [ZJOI2008]树的统计Count(树链剖分+单点更新+区间求和+区间求最大值)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:略. 题解:树链剖分模版,注意一些细节即可. #include <ios ...

  3. Netty源码分析 (四)----- ChannelPipeline

    netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,pipeline像是可以看作是一条流水线,原始的原料(字节流)进 ...

  4. 章节十六、6-xml参数化and并行case

    一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...

  5. 【Redis】主从复制

    一.概述 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从 ...

  6. .Net基础篇_学习笔记_第六天_异常捕获复习及断点调试

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. HBase shell scan 模糊查询

    0.进入hbase shell ./hbase shell help help "get" #查看单独的某个命令的帮助 1. 一般命令 status 查看状态 version 查看 ...

  8. [大数据学习研究] 4. Zookeeper-分布式服务的协同管理神器

    本来这一节想写Hadoop的分布式高可用环境的搭建,写到一半,发现还是有必要先介绍一下ZooKeeper这个东西. ZooKeeper理念介绍 ZooKeeper是为分布式应用来提供协同服务的,而且Z ...

  9. AD 域服务简介(二)- Java 获取 AD 域用户

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 一.前言 先简单简单回顾上一篇 ...

  10. 关于ClassLoader的使用

    了解ClassLoader: /* * 了解类的加载器:ClassLoader * */ @Test public void testClassLoader() { // 获取到系统类加载器,加载用户 ...