• Session


    1.Session的由来:

        Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。
        Session依赖于Cookie而存在。(浏览器是通过cookie到服务器端作为唯一标识进而获取相应的session,在服务器中的数据库表中存储的每个用户的session都对应着一个cookie)
     
    request.session是一个对象。
     

    2.Django中session的方法。

    1.设置session
        request.session["k1"] = "vaule1"
        request.session.setdefault('k1',123) # 存在则不设置
    2.获取session
        request.session['k1']
        request.session.get('k1',None)
    3.删除session中的数据
         del request.session['k1']
        # 删除当前会话的所有Session数据
        request.session.delete()
        # 删除当前的会话数据并删除会话的Cookie。
        request.session.flush()
        将所有Session失效日期小于当前日期的数据删除
        request.session.clear_expired()
    4.设置会话Session和Cookie的超时时间
        request.session.set_expiry(value)
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。(默认是2周)

    5.会话session的key

        # 会话session的key
        request.session.session_key
        # 检查会话session的key在数据库中是否存在
        request.session.exists("session_key")
     

    3.Session流程解析:

     

    4.settins.py中的设置

    设置Session的cookie在浏览器上的显示,设置后浏览器上的session所对应的cookie键为“xiaohei”(一般不设置)
    # SESSION_COOKIE_NAME = "xiaohei"
    有操作时即时更新session设置的超时时间,让计时是从此刻开始。(一般设置)
    SESSION_SAVE_EVERY_REQUEST = True
     

    5.session版登录验证

     1 from functools import wraps
     2 
     3 def check_login(func):
     4     @wraps(func)
     5     def inner(request, *args, **kwargs):
     6         next_url = request.get_full_path()
     7         if request.session.get("user"):
     8             return func(request, *args, **kwargs)
     9         else:
    10             return redirect("/login/?next={}".format(next_url))
    11     return inner
    12 
    13 def login(request):
    14     if request.method == "POST":
    15         user = request.POST.get("user")
    16         pwd = request.POST.get("pwd")
    17 
    18         if user == "alex" and pwd == "alex1234":
    19             # 设置session
    20             request.session["user"] = user
    21             # 获取跳到登陆页面之前的URL
    22             next_url = request.GET.get("next")
    23             # 如果有,就跳转回登陆之前的URL
    24             if next_url:
    25                 return redirect(next_url)
    26             # 否则默认跳转到index页面
    27             else:
    28                 return redirect("/index/")
    29     return render(request, "login.html")
    30 
    31 @check_login
    32 def logout(request):
    33     # 删除所有当前请求相关的session
    34     request.session.delete()
    35     return redirect("/login/")
    36 
    37 @check_login
    38 def index(request):
    39     current_user = request.session.get("user", None)
    40     return render(request, "index.html", {"user": current_user})
     
     
     
  • 相关阅读:
    spark基础(1)
    Homebrew的使用教程,镜像源的推荐,安装软件的方法
    Scala Trait(特征)
    P5308 [COCI2019] Quiz
    Vjudge contest 425291
    Vjudge contest 424925
    AT3558 Modern Painting
    Vjudge contest 425061
    Vjudge contest 423849
    Codeforces Round 704
  • 原文地址:https://www.cnblogs.com/aberwang/p/10403961.html
Copyright © 2020-2023  润新知