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,HttpResponse
class 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,HttpResponse
from django import http
from 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开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 点击 即可领取