百木园-与人分享,
就是让自己快乐。

django编写cookie

cookie

HTTP协议是一个无状态协议,即每一个请求都是独立的!无法记录前一次请求的状态,但HTTP会使用cookie值进行跟踪会话。在WEB开发当中,使用session来完成会话跟踪,session底层依赖于cookie技术。

其实cookies是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cookies和其他电脑上的cookies是不一样的;cookies不能被视作代码执行,也不能成为病毒,所以它对你基本无害。

在HTTP中,表示服务器对浏览器的“小甜点”。其实cookie是一个{key:value}结构,随着服务器的响应发送给客户端浏览器,然后客户端可以把cookie保存下来,当下一次访问同一服务器的时候把cookie再返回给客户端。cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。当客户端向服务器再次提交请求时,把这个cookie会一起发送过去,这样服务器就会识别到这个客户端,默认会填写一些信息,方便访问服务器。

image-20221106000457703

cookie应用

在django框架下我们简单的实现一下,代码原理如下:

我们目标是通过login视图,进行登录,然后获取到index页面。

def index(request):
        
    return render(request,\"index.html\")


def login(request):
    if request.method == \"GET\":
        return render(request,\"login.html\")

    else:
        user = request.POST.get(\"user\")
        pwd = request.POST.get(\"pwd\")
        if user == \"regina\" and pwd == \"127717\":

            return redirect(\"/index\")
        else:
            return render(request,\"login.html\")

但是现在问题存在于,我们直接去访问index页面也是可以获取到的,从而就绕过了login的验证

image-20221106105610796所以希望可以存在一个东西,在访问index页面时可以验证是否有登录,如果没有登录就访问,服务器就需要把他返回到login页面,如果有就展示index页面

def index(request):
    print(request.COOKIES.get(\"is_login\"))
    is_login = request.COOKIES.get(\"is_login\")
    if is_login == \"true\":
        return render(request,\"index.html\")
    else:

        return redirect(\"/login\")


def login(request):
    if request.method == \"GET\":
        return render(request,\"login.html\")

    else:
        user = request.POST.get(\"user\")
        pwd = request.POST.get(\"pwd\")
        if user == \"regina\" and pwd == \"127717\":
            #登陆成功时,再写cookie
            res = HttpResponse(\"登录成功\")
            res.set_cookie(\"is_login\",\"true\")

            return res
        else:
            return render(request,\"login.html\")

image-20221106110455600

salt值

上述例子可以看出来,cookie值存放的很简单,这就使得有很大的风险被盗取cookie,因此我们引入一个摘要值salt

res.set_signed_cookie(\"is_login\",\"true\",salt=\"20000127\")

服务器端接收的时候也需要改一下接收语句

is_login = request.get_signed_cookie(\"is_login\",salt=\"20000127\")

image-20221106174052845

本文来自博客园,作者:ivanlee717,转载请注明原文链接:https://www.cnblogs.com/ivanlee717/p/16865223.html


来源:https://www.cnblogs.com/ivanlee717/p/16865223.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » django编写cookie

相关推荐

  • 暂无文章