djingo之登陆验证,cookie,session

Posted yingjp

tags:

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

一:会话技术:

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

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

二:cookie

  1:什么是cookie

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

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

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

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

 

  2:djingo的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

四:djingo登陆验证,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.

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

    

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

我在一个后台登陆时,把用户名存入session中了,如果修改密码session丢失,怎么办

接口调试工具Postman之自动同步Chrome cookies,实现自动登陆验证

Djingo之路由层

Django之cookie

Python网络爬虫之用户名密码及验证码登陆

Tornado 用户身份验证框架