django之session cookie

cookie与session

前提:由于http协议是无状态的,无法记录用户的状态,因此我们就利用cookie与session来帮助我们完成状态记录保存。

cookie

cookie就是保存在客户端浏览器上的键值对

  工作原理:当你登陆成功之后 浏览器上会保存一些信息,下次再访问的时候,就会带着这些信息去访问服务端 服务端通过这些信息就可以识别出你的身份

  cookie虽然是写在客户端浏览器上的  但是是服务端设置的 浏览器可以选择不服从命令 禁止写cookie 但这样 往往登录会出现错误

 

session

session就是保存在服务器上的键值对

  session虽然是保存在服务器上的键值对,但是它是依赖于cookie工作的

  服务端返回给浏览器一个随机的字符串  浏览器以键值对的形式保存   sessionid:随机字符串

  浏览器在访问服务端的时候,就会将随机字符串携带上   后端获取随机字符串与后端的记录做比对   

    随机字符串1:数据1

    随机字符串2:数据2

 

Django中Cookie操作

django返回给客户端浏览器的都必须是HttpResponse对象

#第一种直接返回
    return HttpResponse()
    return render()
    return redirect()
#第二种先实例化对象 再返回
    obj1 = HttpResponse()
    return obj1
    obj2 = render()
    return obj2
    obj3 = redirect()
    return obj3

 

操作cookie的方法:

#设置cookie利用的就是HttpResponse对象
    obj1.set_cookie('k1','v1')

#获取cookie
    request.COOKIE.get('k1')

#删除cookie
    obj1.delete_cookie('k1')
#设置超时时间
    max_age = None,超时时间
    expires=None,超时时间(IE requires expires, so set it if hasn't been already.)

 

cookie登陆版校验

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            #先获取url中get请求中携带的参数
            old_url = request.GET.get('next')
            if old_url:
                #设置cookie
                obj = redirect(old_url)
            else:
                #如果用户直接访问的登陆页面那么直接跳到网站首页
                obj = redirect('/home/')
            obj.set_cookie('name','jason')
            return obj
    return render(request,'login.html')

def login_auth(func):
    @wraps(func)
    def inner(request,*args,**kwargs):
        target_url = request.get_full_path()
        if request.COOKIES.get('name') == 'jason':
            res = func(request,*args,**kwargs)
            return res
        else:

            return redirect('/login/?next=%s'%target_url)
    return inner
cookie登陆版

 

 

Django中Session操作

#设置session
    request.session['name'] = 'jason'
"""
    上面这句话发生了三件事
    1.django内部自动生成了一个随机字符串
    2.将随机字符串和你要保存的数据  写入django_session表中(先在内存中生成一个缓存记录,等到经过中间件的时候才会执行)   
    3.将产生的随机字符串发送个浏览器写入cookie
    
            sessionid:随机字符串
"""

#获取session
    request.session.get('name')
"""
   上面这一句话发生了三件事
    1.django内部会自动从请求信息中获取到随机字符串
    2.拿着随机字符串去django_session表中去比对
    3.一旦对应上了就将对应的数据解析出来放到request.session中

"""
#django_session表中默认的超时时间是14天   其中的一条记录只针对一个浏览器


#删除当前会话的所有session数据
      request.session.delete()   #删除的是浏览器的sessionid信息
 
#删除当前的会话数据并删除会话的cookie
       request.session.flush()  #将浏览器和服务端全部删除‘        

# 设置会话Session和Cookie的超时时间
        request.session.set_expiry(value)
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。
 

 

总结:你在后期可以i将一些数据保存到session表中,保存的数据,可以在后端任意位置获取到

 

posted @ 2019-09-25 17:20  s686编程传  阅读(155)  评论(0编辑  收藏  举报