一、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. JAVA API的下载和中文查看API

    一.JAVA API的下载 1.1 JAVA由SUN公司开发,2006年SUN公司宣布将Java技术作为免费软件对外发布,标志着JAVA的公开免费.2009年,SUN公司被甲骨文公司收购,因此我们现在 ...

  2. php配置文件php.ini的详细解析(续)

    file_uploads = On                                                                                 // ...

  3. Shell按行读取文件的3种方法

    Shell按行读取文件的方法有很多,常见的三种方法如下: 要读取的文件: [root@mini05 -]# cat file.info 写法一: [root@mini05 -]# cat read1. ...

  4. PHP匿名函数

    PHP匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值. 举例: &l ...

  5. ubuntu中利用qtcreator引用opencv249及采起采集卡的共享库

    opencv Link:https://github.com/opencv/opencv CqUsbCam link:https://github.com/niuxiaobaoer/CqUsbCam_ ...

  6. 【Teradata】数据库初始化(sysinit和dip工具)

    1.删除数据库对象 (1)使用root用户登录数据库节点 arcmain .LOGON 127.0.0.1/dbc,dbc_password; (2)清理所有数据库对象及数据 DELETE DATAB ...

  7. 从Hadoop到Spark的架构实践

    当下,Spark已经在国内得到了广泛的认可和支持:2014年,Spark Summit China在北京召开,场面火爆:同年,Spark Meetup在北京.上海.深圳和杭州四个城市举办,其中仅北京就 ...

  8. 阿里云CentOS下nodejs安装

    1. 下载node包(包含npm) cd /usr/local/src/ wget https://nodejs.org/dist/v10.11.0/node-v10.11.0-linux-x64.t ...

  9. Python学习之装饰器进阶

    函数知识回顾: 函数的参数分为:实参和形参. 实参:调用函数的时候传入的参数: 形参:分为3种(位置参数.默认参数.动态传参) 位置参数:必须传值 def aaa(a,b): print(a,b) a ...

  10. [matlab] 20.图与网络 matlab自带函数使用

    matlab自带的biography(产生一个句柄) 可以用于画图 R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号 C=[2 3 3 3 4 5 5 6 6 ...