美文网首页
11.会话保持

11.会话保持

作者: 爱修仙的道友 | 来源:发表于2019-03-09 20:05 被阅读0次

    状态保持:

    1. http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
    2. 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
    3. 存储方式包括cookie、session,会话一般指session对象
    4. 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
    5. 使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
    6. 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
    • 注意:不同的请求者之间不会共享这个数据,与请求者一一对应

    Cookie保存用户信息

    • views.py
    class homeView(View):
        def get(self, request):
            # 获取请求中的Cookie
    
            num = request.COOKIES.get('num')
    
            if num:
                num = int(num)+1
            else:
                num = 1
    
            # 构造返回数据
            response = render(request, 'home/index.html', locals())
            # cookie中设置num 返回给客户端浏览器, 过期时间为10s
            response.set_cookie('num', num, max_age=10)
            return response
    
    • urls.py
    urlpatterns = [
        path('home/', views.homeView.as_view(), name='home')
    ]
    
    • home.html
    我是 第{{ num }} 次访问
    
    • 展示


      image.png
    • 缺点,用户客户端可以修改


      image.png

    Session保存用户信息

    • 可以理解为 sessionid 是客户端随机生成的唯一的 key值,保存在cookie中,
    • 服务器session中保存着很多键为 sessionid 值为userinfo的字典,
    • 客户端和服务器通过session_id交流
    image.png
    • 启用


      image.png
    • 方法
      启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
    - get(key, default=None):根据键获取会话的值
    - clear():清除所有会话
    - flush():删除当前的会话数据并删除会话的Cookie
    - set_expiry(value):设置会话的超时时间
      - 如果没有指定,则两个星期后过期
      - 如果value是一个整数,会话将在values秒没有活动后过期
      - 若果value是一个imedelta对象,会话将在当前时间加上这个指定的日期/时间过期
      - 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
      - 如果value为None,那么会话永不过期
    
    • settings.py 配置(可以不设置,保持默认)
    # 是否关闭浏览器使得session过期,默认是False
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    
    # 是否每次请求都保存session,默认修改之后才保存
    SESSION_SAVE_EVERY_REQUEST = False
    
    # session的cookie失效日期,默认是2周
    SESSION_COOKIE_AGE = 1209600
    
    • views.py
    class homeView(View):
        def get(self, request):
    
            name = request.session.get('name')
    
            return render(request, 'home/index.html',locals())
    
    class LoginView(View):
    
        def get(self,request):
            return render(request,'login/login.html')
    
        def post(self, request):
            username = request.POST.get('username','')
            password = request.POST.get('password','')
            if username == 'liuwei' and password == '123456':
                # 设置值
                request.session['name'] = username
                request.session.set_expiry(10)
                return redirect(reverse('index:home'))
    
    
    class LogoutView(View):
        def get(self, request):
    
            request.session.flush()
            return redirect(reverse('index:home'))
    
    • urls.py
        path('home/', views.homeView.as_view(), name='home'),
        path('login/', views.LoginView.as_view(), name='login'),
        path('logout/', views.LogoutView.as_view(), name='logout'),
    
    • 展示


      image.png
      image.png
      image.png

    算法加密

    • 加盐,时间戳,等等

    相关文章

      网友评论

          本文标题:11.会话保持

          本文链接:https://www.haomeiwen.com/subject/lnprpqtx.html