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.

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

    

原文地址:https://www.cnblogs.com/yingjp/p/10010088.html

时间: 2024-10-11 13:37:26

djingo之登陆验证,cookie,session的相关文章

Django实现cookie&session以及认证系统

COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是"谁"了. cookie虽然在一定程度上解决了"保持状态"的需求,但是由于cookie本身最大支持4096字节,以及co

Cookie Session 分页

cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要"保持状态".因此cookie就是在这样一个场景

cookie&session及自定义分页

cookie&session和自定义分页 cookie由何而来? 由于HTTP协议是无状态的,即每次请求都是独立的,如:人生只如初见. 状态可以理解为客户端和服务器在某次会话中产生的数据,无状态的就是这些数据不会被保留.但在实际中,会话中产生的数据又是我们需要保存的.因此Cookie就是在这样一个场景下诞生. 什么是Cookie? Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的

Cookie/Session机制详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程序中,会话跟踪是很重要的事情.理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个

【转载】Cookie/Session机制详解

[本文转自]http://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程

java web程序 登陆验证页面 4个页面人性化设置

到这里,快期末考试了,老师不讲课,我心里有苦不想说,也许没有考虑到老师的感受,让老师难堪了 但是我的行为已不再是我可以做的了.不可能了,我只是职业性的机械的做事了. 思路: 1.第一个是form表单,用户输入用户名和密码,点击登陆按钮 a.jsp 2.第二是验证页面,如果不是那个用户名和密码,则显示登陆失败或错误,点击链接重新登陆ok.jsp d.jsp 3.当用户为输入任何数据,即为空的时候,则提示用户先登录,c.jsp 第一个页面,就不写了 验证页面 ok.jsp ? 1 2 3 4 5 6

【Java EE 学习第70天】【数据采集系统第二天】【数据加密处理】【登陆验证】【登陆拦截器】【新建调查】【查询调查】

一.数据加密处理 这里使用MD5加密处理,使用java中自带加密工具类MessageDigest. 该类有一个方法digest,该方法输入参数是一个字符串返回值是一个长度为16的字节数组.最关键的是需要将这个16位的字节数组转换成为32位的字符串,转换方法是使用位移+与运算.将高四位移到低四位&0X0F得到一个字符,直接使用该值&0X0F得到一个字符,这样一个8bit的字节就能够拆成2个字符.最终16Byte就能够转换成为32个字符. 1 package com.kdyzm.utils;

asp.net 登陆验证 Form表单验证的3种方式 FormsAuthentication.SetAuthCookie;FormsAuthentication.RedirectFromLoginPage;FormsAuthenticationTicket

我们在登陆成功后,使用下面的3种方法,都是同一个目的:创建身份验证票并将其附加到 Cookie, 当我们用Forms认证方式的时候,可以使用HttpContext.Current.User.Identity.IsAuthenticated  (或者也可以用 Request.IsAuthenticated ,这个实际上也是调用的是User.Identity.IsAuthenticated来验证)来判断是否登陆;而这个判断就是依赖于这个Cookie里的信息判断用户是否登陆. FormsAuthent

Cookie&&Session会话技术之再体验

1.转发与重定向[****]    * 重定向:重新确定请求方向        * 发送者:服务器 --> 响应(response)浏览器        * 执行者:浏览器 --> 重新请求        * 跳转        * response.sendRedirect("/day04/1.html");        * //完全等价,隐藏了HTTP协议的具体要求        * response.setStatus(302);        * response