一、cookie

由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站。目前最新的规范是RFC 6265,它是一个由浏览器服务器共同协作实现的规范。

Cookie的处理分为:

服务器像客户端发送cookie

浏览器将cookie保存

之后每次http请求浏览器都会将cookie发送给服务器端

  • 简单的来说,cookie就是服务端给浏览器的一些键值对(key - value)

浏览器会按照规则保存下 cookie,并在后面的请求中把这些 key-value一并发送给服务端

服务端拿到辨别是谁给我发的请求,是否经过认证之类

1.2 Django中操作cookie
  1. Django中设置cookie:

 

from django.shortcuts import render, HttpResponse, redirect

 

创建一个要返回给前端的对象

response = HttpResponse("<center>404 你错了!</center>")

 

基于response 来设置 cookie

response.set_cookie(key="name", value="zhanSan") #这样一个带默认约束的cookie就设置好了

 

设置一个带超时时间的cookie 参数 max_age (expire) 表示多少秒后过期

response.set_cookie("email", "1122@163.com", max_age=60)

 

设置一个加密(加盐)的cookie

response.set_signed_cookie("uid", 17, salt="for_uid")

 

大功告成,直接给客户端返回就行

return response

  1. Django 在 request 对象中封装了所有来自客户端的数据,

所以:我们获取cookie就是基于request对象来操作

 

request.COOKIES.get("name", None)

 

获取那个加了盐的 key = uid 的值,需要根据加的盐反解

request.get_signed_cookie("uid", salt="for_uid")

 

这儿的cookies 都是以字典形式在维护的,所以不建议通过request.COOKIES["name"]去取,

当key不存在时就报错了

1.2 续 cookie中的其他重要参数
rep = HttpResponse(...) 或 rep = render(request, ...)

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

 

二、session
  • session与cookie区别:

  1. cookie保存在客户端,session保存在服务端

  2. cookie的保存形式为key-value, session的保存形式为 key : {k1: v1, k2:v2, k3: v3}

  3. session的第一个key为服务端生成的字符串,会以cookie的形式发送给客户端

    默认发送(浏览器保存)形式为:sessionid="随机字符串"

    服务器的保存形式为:"随机字符串": {k1:v1, k2: v2, k3:v3}

  4. Django 中的session也是维护在 request参数中的,COOKIES也是

2.2 Django操作session
  • Django在生成session非常的方便,默认自动给你生成、维护 session的识别(随机字符串)

不需要你去手动生成维护这个字符串及对应的字典。只需要去设置需要存储的值就行了

  1. 生成并设置session:

    request.session['user'] = "zhangSan"

    request.session['email'] = "zhangSan123@163.com"

    request.session['pwd'] = "xxxxxxxx"

  2. 设置session超时时间:

    request.session.set_expiry(60) #超时时间设置为60秒

  3. 退出时清除设置的session:

    request.session.clear()

因为sesson内部是一个字典,所以字典的方法都可以使用

所有 键、值、键值对

    request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
  • 一些常用的session方法:

用户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.session_key)

 

request.session.set_expiry(value)

* value整数,session在value秒后失效。

* value是datatime或timedelta,session会在设定时间后失效。

* value=0,用户关闭浏览器session就会失效。

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

 

2.3 配置session全局设置
  • 项目木同名的settings.py下:
  1. 存储引擎:

cache中:

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

SESSION_ALIAS = "db2" #别名缓存位置,指定存储库。默认内存缓存,也可以是memcache

数据库中

SESSION_ENGINE = "django.contrib.sessions.backends.db"

文件中:

SESSION_ENGINE = "django.contrib.sessions.backends.file"

SESSION_FILE_PATH = None #文件路径

缓存加DB

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

  1. 常用设置:

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

三、JS操作cookie

获取项目所有cookie

document.cookie

document.cookie
"__gads=ID=3694xxxa751ed:T=1511442057:S=ALNI_MZTRxxxxNqKryxxxxZu7kjFQ; _ga=GA1.2.1165121507991355; __utma=226521935.11149926.15015647545.1531209676.1531270605.3; __utmz=2265156451270605.3.2.utmcsr=zzk.cnblogs.c587445ccn=(referral)|utmcmd=referral|sdfecct=/s/blogpost; AlwaysCresdfesAsActive=True; AdminCoosfesdfsExpandAdvanced=True; SERVERID=a15b3bd10716efwefsdfbb89e87a05|1536885192|1535456884623"

可以看见全部存在一个字符串中了:那想匹配谁就用正则策略去匹配吧!

都是 key=value; 然后以分号结尾

var cookie_str = document.cookie
var pattern = /你要匹配的key=([.|_a-zA-Z0-9]+:) \b/
pattern.exec(cookie_str)
3.2 给cookie设置超时时间

匹配部分我使用的jquery.cookie.js插件,你也可以使用原生JavaScript

function expire_session(name, time){
var date_time = new Date();
date_time.setTime(date_time.getTime()+time);
var expires= "expires="+ date_time.toGMTString()+";path=/";
document.cookie = name+"="+$.cookie(name)+';'+expires;
}

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

  3. Django中的Cookie、Session、Token

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

  4. Django中的cookie与session

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

  5. Django中的cookie和session

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

  6. 【转】Django中的cookie与session

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

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

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

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

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

  9. python Django中的cookie和session

    目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...

随机推荐

  1. SQL server 数据库的索引和视图、存储过程和触发器

    1.索引:数据排序的方法,快速查询数据 分类: 唯一索引:不允许有相同值 主键索引:自动创建的主键对应的索引,命令方式不可删 聚集索引:物理顺序与索引顺序一致,只能创建一个 非聚集索引:物理顺序与索引 ...

  2. kafka_2.11-2.0.0_安装部署

    参考博文:kafka 配置文件参数详解 参考博文:Kafka[第一篇]Kafka集群搭建 参考博文:如何为Kafka集群选择合适的Partitions数量 参考博文:Kafka Server.prop ...

  3. June.19 2018, Week 25th Tuesday

    True love is visible not to the eyes but to the heart. 真爱不靠眼睛看,要用心感受. True love is visible not to th ...

  4. 【Linux基础】VI命令模式下大小写转换

    [开始位置] ---- 可以指定开始的位置,默认是光标的当前位置 gu ---- 把选择范围全部小写 gU ---- 把选择范围全部大写 [结束位置] ---- 可以跟着类似的w,6G,gg等定位到错 ...

  5. MySQL高级知识(九)——慢查询日志

    前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志 ...

  6. setjmp/longjmp

    1.setjmp/longjmp属于传统的错误处理 2.setjmp/longjmp是对goto语句的补充,goto仅仅能实现局部跳转.setjmp/longjmp能够实现全局跳转 3.setjmp/ ...

  7. flash设置里面:您的 Flash 设置会一直保留到您退出 Chrome 为止。

    疑问:flash设置里面:您的 Flash 设置会一直保留到您退出 Chrome 为止. 我记得以前的版本配置后就一直用啊,允许的就可以一直允许,现在这个sb版本退出后就恢复到默认,允许列表的网站就清 ...

  8. Arduino 操作OLED

    https://item.taobao.com/item.htm?_u=n1qf7bf5beef&id=562158712128 1.模块尺寸:35(L)*31(W)mm 2.电源电压:2.8 ...

  9. Armitage攻击winxp——P201421410029

    实验简介 实验所属系列: 安全工具使用 实验对象:本科/专科信息安全专业 相关课程及专业: linux基础.网络安全 实验类别: 实践实验类 预备知识 Armitage基本介绍       Armit ...

  10. python:面向对象编程之Zope.interface安装使用

    持续学习python+django中... 一.接口简述 在我们所熟知的面向对象编程语言中,大多提供了接口(interface)的概念.接口在编程语言中指的是一个抽象类型,是抽象方法的集合:它的特点如 ...