Django框架cookie和session的详解

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值