• cookie和session


    一. cookie

      1. cookie的由来

        由于HTTP协议是无状态的,所以每次请求的时候都是全新的,但是有些数据是需要保留的(帐号密码),所以出现了cookie.

      2. cookie的原理及作用

        cookie可以保存在本地(键值对保存),用户每次去请求的时候都带着数据,这样就不需要用户每次都输入数据了.

      3. cookie中的方法

        response.set_cookie("key","value")  需要在响应对象上设置

        response.set_signed_cookie("key","value",salt="")  加盐版的

        request.COOKIES      获取到的是字典形式的对象,可以使用字典的方法操作

        request.get_signed_cookie()   获取加盐版的cookie

        response.delete_cookie("key") 删除cookie

      4. cookie版的登陆

    cookie版
    def login(request):
    
        if request.method == "GET":
            return render(request, "login.html")
    
        else:
            username = request.POST.get("username")
            password = request.POST.get("password")
            ret = models.UserInfo.objects.filter(username=username, password=password)
    
            if ret.exists():
                cookie_obj = request.COOKIES
                # print(cookie_obj)   # {'csrftoken': 'YpOTG4x5A4NVRJb45PCmeDpPxVUEKV6wLJgUxBnQBdTnrb0PQp0JlKqWAAPd3Hkx'}
    
                ret = redirect(reverse("home"))
                # ret.set_cookie("is_login", True, max_age=10)    # max_age 是过多久清空这个cookie,默认14天
                ret.set_signed_cookie("is_login", True, salt="hhh")  # 加盐版
                # print(ret)  # <HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/home">
                return ret
            else:
                return render(request, "login.html")
    
    
    
    def home(request):
    
        is_login = request.COOKIES.get("is_login", False)  # cookie里面存的是字符串类型的
        # is_login = request.get_signed_cookie("is_login", False, salt="hhh")  # 过去加盐版的
    
        # print(is_login, type(is_login))     # True <class 'str'> 这是登陆时的
        # print(is_login, type(is_login))     # True:1h2D76:1avfdKMi4-9eedxyPi4RgcRLCP0 <class 'str'>  加盐版的
    
        if not is_login:        # 因为登陆成功返回的不是bool而是一个字符串,所以判断没有登陆的状态
            return redirect("login")
    
        else:
            return render(request, "home.html")
    cookie版

    二. session

      1. session的由来

        由于cookie最大支持409kb,并且存在客户端的,不安全,所以有了session,它支持更多字节,并且存在服务器.

      2. session的原理

        用户每次请求的时候都带着一个sessionid,服务器收到后使用sessionid识别拿对应的数据,一个浏览器对应一个sessionid.

      3. session中的方法

        request.session        获取session对象,跟字典一样

        request.session.get("key",None) 获取session中的key

        del request.session["key"]    删除session

        request.session.delete()     删除当前会话的session

        request.session.flush()      删除当前会话数据并删除cookie

        request.session.set_expiry(value) value是整数时,就是在多少秒后失效,为0时,关闭浏览器就失效

      4. session版的登陆

    def login(request):
    
        if request.method == "GET":
            return render(request, "login.html")
    
        else:
            username = request.POST.get("username")
            password = request.POST.get("password")
            ret = models.UserInfo.objects.filter(username=username, password=password)
    
            if ret.exists():
                request.session.setdefault("username", username)    # 给session添加键值
                request.session["is_login"] = True
    
                return redirect(reverse("home"))
    
            else:
                return render(request, "login.html")
    
    # 装饰器验证登陆
    def session(fn):
        def inner(request, *args, **kwargs):
            is_login = request.session.get("is_login", False)
            if is_login:
                ret = fn(request)
                return ret
            else:
                return redirect(reverse("login"))
        return inner
    session版
  • 相关阅读:
    .Net网站的web.config配置说明
    listview垂直滚动条效果
    .net 委托事件
    利用API实现窗体淡入淡出特效
    易经中的64个大智慧
    FlashWindowEx实现窗口在任务栏闪烁/变化颜色
    实现XML与DataTable互转 .NET
    C# .NET弹出窗口
    SVN使用教程
    在IE中使用VS.net WinForm控件
  • 原文地址:https://www.cnblogs.com/q767498226/p/10520582.html
Copyright © 2020-2023  润新知