zoukankan      html  css  js  c++  java
  • django之登陆验证,cookie,session

    一:会话技术:

          1:什么是会话跟踪技术:

        首先我们应该知道,什么是会话。当浏览器(客户端)第一次访问某个网站的时候(服务器)。该浏览器便和服务器建立了单独的会话。直到浏览器关闭或服务器断开。但是一个网站有许多请求,如/login/,/index/等,而http协议是一种无状态的协议,一次请求一次链接,并不会保存状态信息。而我们一些信息,常常需要多个请求之间进行交互。既然请求无法保存登陆信息,那么可以使用会话跟踪技术来保存数据信息,进而进行多个请求之间的数据互通。实现会话跟踪技术就可以使用cookie和session来吗实现。    

    二:cookie

      1:什么是cookie

        cookie是存在浏览器上的一种对象,用于保存浏览器的一些用户信息,比如登陆信息,包括登陆状态,上一次登陆时间。

          优点:在用户二次登陆的情况下,可以的快速获取用户登陆状态。

          缺点:因为是保存在浏览器端所以安全性差

            保存方式:采用键值对的方式保存:{key:value,key:value}

      2:django的cookie实现

       1:设置cookie  

    def  log_in(request):
        if  request.method=='POST':
            user = request.POST.get('username')
            password = request.POST.get('password')
            if user == 'yjp' and password == 'abc':#登陆验证成功
               obj = redirect('/index')
               obj.set_cookie('cookie_id','cookie_value')#设置cookie,在浏览器存储{'cookie_id':'cookie_value'}
               return  obj
        return render(request, 'login.html', locals())

       2:获取cook

    def  index(request):
        co =request.COOKIES.get('cookie_id',None)#根据cooke_id获取cookie
        if co :
            return render(request, 'index.html')#存在cookie跳转首页
        return render(request, 'login.html')#不存在 跳转登陆页

    浏览器第一次请求,携带一个空的cookie,服务器相应的时候,往空的cookie,添加信息。以后的每次请求都携带该cookie.

     

      3:删除cookie   

    response.delete_cookie("cookie_key",path="/",domain=name) 

    三:session

      3.1:什么是session

        session和cookie的作用一样相似,用来保存用户的状态信息。通常保存在服务器上,对用户而言,不可见,相对安全。

        保存方式:使用键值对的方式保存,{key:value,key:value}

        优点:相对于cookie较为安全。

        缺点:通常保存在数据库上,每次保存数据都会进行数据库的读取或写入,影响效率。

         3.2:session实现

    def log_in2(request):
      if
    request.method=='POST': user = request.POST.get('username') password = request.POST.get('password') if user == 'yjp' and password == 'abc':print('session',request.session) session=request.session session['verfiy'] ='is_login' #设置cookie obj = redirect('/index') return obj return render(request, 'login.html', locals()) def index2(request): co = request.session.get('verfiy', None)#获取cookie if co == 'is_login': return render(request, 'index.html') return render(request, 'login.html'

    四:django登陆验证,auth.利用cookie+session的保存技术

         4.1:cookie+session保存过程

              1:浏览器第一次发送请求的时候,发送一个空的cookie,服务器此时设置session  如{'user':'yuan'}。

        2:当session设置成功后,服务器会做两步操作。一:生成一个随机字符串,并将该字符串当作当作session_key,{'user':'yuan'}当作session-data 存在数据库上。

    第二步,生成一个cookie{'session_id':'随机字符串'},返回浏览器。

       3:浏览器下次发送请求的时候cookie={'session_id':'随机字符串'},服务器拿到随机字符串,当作session_key,在数据库中取出session_data,这样就完成了session值的传递。

     

      4.2:auth验证的代码实现

    from django.shortcuts import render,redirect,HttpResponse
    import random
    from django.contrib import auth        #导入登陆验证的模块
    # Create your views here.
    from django.http import JsonResponse
    def index(request):
        if request.user:    #判断用户是否存在
            print(request.user)
            return render(request,'index.html')
    
        else:
            return render(request,'login.html')
    
    def  login(request):
        if  request.method=='GET':
            return render(request,'login.html')
        if request.method=='POST':
            data={'user':None,'msg':None}
            print(request.POST)
            user =request.POST['user']
            pwd =request.POST['pwd']
            code =request.POST['code']
            if  code.lower()==request.session['code'].lower():
                user=auth.authenticate(username=user,password=pwd)#登陆验证,验证用户登陆信息是否正确,正确返回一个user已经验证通过的用户
                if  user:
                    auth.login(request,user)#接受一个request对象和通过登陆验证user,并完成上面三步cookie+session的设置
                    data['user']=True
                else:
                    data['msg'] = '用户名或密码错误'
    
            else:
                data['msg']='验证码错误'
    
            return JsonResponse(data)
    def logout_view(request):
      auth.logout(request)#注销用户

    五:User对象:

      User对象有两个属性(user,password)。可以通过request.user.is_authenticated()来验证用户登陆是否通过验证,通过验证返回true.

    验证后的怎么操作和该方法无关。该方法只做验证这一个功能。

        

  • 相关阅读:
    is(C# 参考)
    索引器(C# 编程指南)
    修改IIS文件上传大小限制
    Sql Server判断某列字段是否为空或判断某列字段长度
    Linq分页查询
    H5网页播放器播不了服务器上的mp4视频文件
    [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
    如何通过ildasm/ilasm修改assembly的IL代码
    Python实战之set学习笔记及简单练习
    Python实战之int学习笔记及简单练习
  • 原文地址:https://www.cnblogs.com/yingjp/p/10010088.html
Copyright © 2011-2022 走看看