美文网首页
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.会话保持

    状态保持: http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,...

  • 20171107 Tomcat(二)

    会话保持Tomcat ClusterTomcat实现会话粘滞Tomcat实现会话集群Tomcat实现会话服务器 一...

  • Tomcat会话保持方式实现与MSM配置实例

    Tomcat会话保持方式 (1). session sticky:简单的基于会话保持机制,在调度器上实现; sou...

  • Tomcat会话保持

    Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统...

  • tomcat会话保持

    tomcat的会话保持方式有三种:1、session sticky:会话粘滞,通过同一个客户端的相关请求分发到同一...

  • 保持会话连接

    网站使用TCP协议,每次连接建立会话需要三次握手,为了提高效率,一次建立会话后连接保持一定时间,不许要每次请求都进...

  • session会话保持的几种方式并举例实现

    一、会话保持的几种方式 1、session sticky粘性会话保持方式 方法一、source_ip#源地址绑定 ...

  • session会话保持原理

    1. 什么是会话保持? 会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会...

  • Cloud Foundry Session Affinity(S

    会话保持(Session Affinity),有时又称粘滞会话(Sticky Sessions), 是负载均衡领域...

  • nginx会话保持之sticky模块

    nginx会话保持之nginx-sticky-module模块 在使用负载均衡的时候会遇到会话保持的问题,常用的方...

网友评论

      本文标题:11.会话保持

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