1,我先带大家了解一下HTTP的 “无状态” 模式:
什么是无状态模式 -->> 就是用户每次请求都是独立的,它的执行情况和结果与前面的请求和后面的请求都是毫无直接关系。
就好像人生只如初见,见面过后,你不认识我,我又不认识你一样。对服务器来说,每次请求都是全新的。
比如:某用户输入账号和密码后登录到www.baidu.com网站,再次请求百度服务器,用户登录的状态就消失,仿佛又以新的用户身份访问www.baidu.com网站,这就是HTTP的 “无状态” 模式。
2,Cookie 解决 HTTP的“无状态”特点
在1993年3月,网景公司的前雇员Lou Montulli 发明了Cookie,来解决这样的HTTP的 “无状态” 模式。
Cookie的理解: cookie 其实就是键值对(key:value)格式的小段信息,它是由服务器发送过来存储在浏览器中的一组组键值对数据;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。
2.1conkie的作用:
主要就是用来登录状态的判定
2.2cookie的特点:
1. 以键值对的方式存储在浏览器当中 2. cookie 基于域名安全,意思就是不同的域名cookie是不能相互访问的, 比如:同一浏览器中同时访问 "www.baodu.com" 和 "www.soufun.com" ,它们各自网站的cookie 是不能相互访问获取的,这是它的独立性和安全性。 3. 浏览器访问某一个网站的时候,会将浏览器存储的相关网站的所有的cookie 都发送给该网站的服务器。服务器需要使用 request.COOKIES 来获取cookie数据。 4. cookie是有过期时间的,如果不指定时间,默认会关闭浏览器则失效。设置时间:max_age 单位:秒(s)
2.3cookie的优点以及缺点:
优点: 解决了HTTP协议的“无状态”模式。 缺点: 1. 安全性较差;2. 存储量小,最大支持4096字节。需要靠 Session 来弥补。
3,Django操作cookie
3.1 设置Cookie
可以通过HttpResponse对象中的set_cookie方法来设置cookie。
相关代码如下:
from django.shortcuts import render,HttpResponseclass CookieSessionView(View): """ 测试 Coolie http://127.0.0.1:8000/cookies/ """ def get(self,request): """ 设置cookie """ # HttpResponse.set_cookie(cookie的名, value=cookie的值, max_age=cookie有效期) response = HttpResponse("设置cookie OK") response.set_cookie("username","lin123",max_age=3600) # 有效时间1h return response
请求结果:
3.2读取cookie
可以通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。
相关代码如下:
from django.shortcuts import render,HttpResponsefrom django import httpfrom django.views import View class ReadCookeSessionView(View): """获取 Coolie http://127.0.0.1:8000/readcookies/ """ def get(self,request): """ 读取 Coolie ; 通过 键 获取 值 """ cookie1 = request.COOKIES.get("username") # 获取普通的cookie print(cookie1) return http.HttpResponse(f"读取Coolie:{cookie1}")
运行的结果:
4,关于session的详解和使用
4.1 session的由来
Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及 Cookie 本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。
我们可以给每个客户端的Cookie分配一个唯一的id(也就是session_id),这样用户在访问时,通过Cookie,服务器就请求的用户是“谁”。然后我们再根据不同的 Cookie 的 id,在服务器上保存一段时间的私密资料,如“账号密码”等等。
总结:session的作用:1. 能支持更多的字节;2. 有较高的安全性。说白了就是可以弥补Cookie的缺点
4.2 Session 存储方式
优先选择存储 NoSQL 类型的Redis数据库中。
4.3 Session相关方法(Django)
1.设置Session:可以用request.session["key"] = "value"来进行设置2.Session 根据键读取值:request.session.get('key',None)3.清除所有Session,在存储中删除值部分: request.session.clear()4.清除session数据,在存储中删除session的整条数据: request.session.flush()5.删除session中的指定键及值,在存储中只删除某个键及对应的值: del request.session["key"]6.设置session的有效期: request.session.set_expiry(value)举例下列代码只是设置Session相关。 from django.shortcuts import render,HttpResponse from django import http from django.views import View class BooksView(View): """ 请求url http://127.0.0.1:8000/setsession/ """ def get(self,request): # 设置cookie: 使用响应对象设置 # 先创建出响应对象 response = HttpResponse("OK") # 响应对象调用set_cookie() response.set_cookie("username","boy123",max_age=3600) # 设置session: 假装登录后使用session记住用户登录状态 # request.session["key"] = "value" request.session["username"] = "boy123" # 3. 使用上下文渲染"book.html",并返回给客户端 return response
以上就是小编今天为大家带来的内容 小编本身就是一名python开发工程师我自己花了三天时间整理了一套python学习教程 从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴可私信小编发送 源码 即可