zoukankan      html  css  js  c++  java
  • cookie与session组件

    简介:

    会话跟踪,解决保持状态的需求

    Cookie:浏览器端存的键值对

    Session:服务端存的键值对,底层依赖cookie

    from django.shortcuts import render, HttpResponse, redirect
    
    
    # Create your views here.
    def login_auth(func):
        def inner(request, *args, **kwargs):
            url = request.get_full_path()
            # /shopping/?nana=ppp
            is_login = request.COOKIES.get('is_login')
            # xxx=request.get_signed_cookie('xxx',salt='123')
            # print(xxx)
            if is_login:
                ret = func(request,*args, **kwargs)
            else:
                return redirect('/login/?next=%s' % url)
            # /login/?next=/shopping/?nana=ppp
            return ret
    
        return inner
    
    
    def login(request):
        if request.method == 'POST':
            url = request.GET.get('next')
            name = request.POST.get('name')
            pwd = request.POST.get('pwd')
            if name == 'lqz' and pwd == '123':
                obj = redirect(url)
                obj.set_cookie('is_login', True,path='/shopping/')
                import datetime
                now = datetime.datetime.now().strftime('%Y-%m-%d %X')
                obj.set_cookie('last_time', now)
                obj.set_cookie('name', 'lqz')
                obj.set_cookie('pwd', '123')
                obj.set_signed_cookie('xxx','xxxxxx',salt='123')
                return obj
            else:
                obj = HttpResponse('登陆失败')
                return obj
    
        return render(request, 'login.html')
    
    def logout(request):
    
        obj=HttpResponse('注销成功')
        obj.delete_cookie('is_login')
        return obj
    
    @login_auth
    def shopping(request):
        return render(request, 'shopping.html', locals())
    
    
    @login_auth
    def order(request):
        return render(request, 'order.html', locals())
    
    
    
    from django.utils.decorators import method_decorator
    from django.views import View
    # @method_decorator(login_auth,name='post') #可以加在这,只给post加
    # @method_decorator(login_auth,name='get') #可以加在这,只给get加
    class MyOrder(View):
        @method_decorator(login_auth) #可以加在这,两个都加
        def dispatch(self, request, *args, **kwargs):
            ret=super().dispatch(request, *args, **kwargs)
            return ret
        # 在cbv上加装饰器,需要用method_decorator修饰一下,因为这里第一个参数不一样
        # 不能只能用装饰器,method_decorator也是一个装饰器,修饰装饰器
        # @method_decorator(login_auth) #可以加在这,只给get加
        def get(self,request):
            return HttpResponse('get')
        # @method_decorator(login_auth) #可以加在这,只给post加
        def post(self,request):
            return HttpResponse('post')
    '''
    1 导入from django.utils.decorators import method_decorator
    2 加载get,post,dispatch方法上:@method_decorator(login_auth)
    3 加在类上:@method_decorator(login_auth,name='get')
    '''
    
    def session_test(request):
    
        request.session['username']='lqz'
        request.session['is_login']=True
        '''
        1 生成一个随机字符串
        2 把随机字符串以cookie的形式写回给浏览器
        3 会在数据库里存{'随机字符串':{'username':'lqz','is_login':True}}
        '''
    
        return HttpResponse('ok')
    
    
    def get_session(request):
        name=request.session['username']
        is_login=request.session['is_login']
        print(name)
        print(is_login)
    
        # request.session['k1']
        # request.session.get('k1', None)
        # request.session['k1'] = 123
        # request.session.setdefault('username', 123)  # 存在则不设置
        # del request.session['k1']
        # print(request.session.session_key)
        # 将所有Session失效日期小于当前日期的数据删除
        # request.session.clear_expired()
        # print(request.session.exists("uhsvmv7wc41pneeee6f4w0fxvqy6qzh5m29"))
        # 会删除数据库的session
        # request.session.delete()
        # 删除当前的会话数据并删除会话的Cookie。
        # 通常用它
        request.session.flush()
    
        return HttpResponse('ok')
    
    def test(request):
    
        return HttpResponse('ok')
    views.py

    1 向浏览器写cookie

    2.0 登录之后才能访问订单等后续页面 利用cookie来做

    登陆验证成功后,才写cookie

    2.1 因为后面的页面都要验证cookie,所以用装饰器

    2.2  shopping-login-shopping  回到一开始要访问的页面

    2.3 退出登录,删除cookie,然后就需要重新登录了

    2.4  CBV中使用装饰器,装饰器可以加在4个地方

    Django中操作Cookie

    3.1 cookie加盐和取值

     

    3.2 max_age 封装了expires 设置cookie过期时间

     

    3.3 expires 设置过期时间 20:45 的形式 一般用max_age即可

    3.4 Path   cookie生效的路径,只有请求shopping的时候,cookie才带过去,意味着其他需要验证cookie的页面都不能通过

     

    3.5 Domain 设置生效域名,默认是none 全域名都有效

    3.6 secure=False  只有https协议才传cookie

    3.7 httponly=False 只有http协议才传cookie 客户端传到服务端

    Session

    安全:就算知道随机字符串,但是不知道key里存的东西

    赋值,取值,删除

    1 设置

    Session数据存在数据库中

    cookie:xx=xx;sessionid=xxxx

    2 取值

    3 删除

    # 删除数据库的session   浏览器里的session不会删除
    # request.session.delete()
    # 服务端和浏览器都删除
    # 通常用它
    # request.session.flush()

    settings设置全局配置session

    cookiesession重点:存,取,删。

  • 相关阅读:
    每天学习算法二
    每天学习算法 一
    数据量基础
    SQL server数据库创建代码,filegroup文件组修改,
    SQL学习笔记之 数据库基础(一)
    Oracle的查询-条件表达式
    Oracle的查询-单行查询
    Oracle 的查询-scott用户介绍
    Oracle的基本操作-序列的使用
    Oracle的基本操作-修改表结构、数据的增删改查
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9665654.html
Copyright © 2011-2022 走看看