cookie 验证

Posted 谷永辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie 验证相关的知识,希望对你有一定的参考价值。

登录的时候,先进入login页面,验证成功后,跳转到index页面,

那现在我不登录,直接输入index页面的url,也可以直接看到index页面,那登录的页面的就没有作用了,

所以想看index页面,必须先做登录验证,就要用到cookie,

cookie是一个键值对,记录登录状态,

http协议是无状态协议,不会记录登录的状态,

那cookie就是记录上次的登录状态,有这个状态,就直接显示登录成功后的页面

当客户端第一次登录服务端的时候,登录成功后,服务端随机创建给客户端一个字典,

键是随机的字符串,根据用户名和密码创建,

值是客户端的所有操作的记录,

当这对键值对随着请求结束,会返回到客户端的时候发送到本地(浏览器 ),

浏览器有一个存放一对对的键值对的容器,这个就是cookie,

当第二次再访问的时候,就带着上次访问的结果(键值对)一起到服务端,服务器就知道上次的操作,直接从cookie里取就可以,

浏览器是持有cookie的,可以被禁用掉的,禁用掉后那再次访问服务端,服务端就不知道是谁访问的,就只能直接登录了,

 

在url 路由分发之前,会执行中间件函数,出去的时候还要走一次中间件,

 

在views 文件,login是登录页面,index_cookie 是登录后才能看到的页面

def login(request):

    # print("request_cookies",request.COOKIES)
   # request_cookies    {}  ,得到一个空字典,是第一次访问的
    #自己设置一个cookie,在验证成功后,跳转之前,就要
    #设置cookie

    if request.method=="POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")

        if user == "gu" and pwd =="123":

            #obj 就是要跳转的下个页面,
            obj = redirect("/index_cookie/")

            # 验证成功,给客户端obj,set一个cookie,
            obj.set_cookie("yuan", "123")

            #如果登录成功,就显示index——cookie页面
            return obj
    #用户名和密码不对,还是登录页面,
    return render(request,"login.html")


def index_cookie(request):

    #要判断用户如果没有登录,就不能看到index——cookie页面,
    #在login页面用户登录成功后,服务端给了一个cookie,obj.set_cookie("yuan", "123")
    #所以就可以根据cookie来判断,能否登录

    # print("cookies":request.COOKIES)
    #None是yuan的默认值,
    is_login=request.COOKIES.get("yuan",None)
    if is_login:#判断是否有cookie
        return render(request,"index_cookie.html")  #如果有cookie,就可看到index_cookie 页面,
    else:
        return redirect("/login/")#否则,还是登录页面,

    return render(request,"index_cookie.html")

 

客户端再登录的时候,就可以直接登录inde_cookie 页面,如果是换了浏览器,inde_cookie 页面就不会显示,因为这个浏览器没有上次登录的cookie,

 

以上是关于cookie 验证的主要内容,如果未能解决你的问题,请参考以下文章

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

基于 Cookie 的身份验证

JavaScript单行代码,也就是代码片段

前端面试题-

ASP.Net Core Cookie 身份验证

XSS:如何从 C# 中的字符串中删除 JS 片段?