• Session State Pattern会话状态模式


    • Client Session State 客户会话状态.
      • 在Client端保存会话状态.
      • 运行机制
        • Client在每次请求时会把所有的会话数据传给Server,Server在响应时把所有的会话状态传给Client.
        • 可以是完全无状态的Server.
        • 通常使用可序列化的DTO对象来传递数据.
        • 在HTML中,可选的是:URL参数,表单的隐藏域,Cookie.
      • 使用时机
        • 支持无状态的Server对象.从而提供了最大的集群性能和容错恢复.
        • 适合于小数据量.当数据量大时,保存和传输会有较大的延迟.
        • 安全问题.所有送到客户的数据都很容易泄露或被篡改.而加密又会影响性能.
        • 会话标识号一般使用Client会话状态.
    • Server Session State服务器会话状态
      • 将会话状态以序列化的形式存放在Server端.
      • 运行机制
        • 最简单的方法是把会话数据放在应用Server的内存中.
          • 将会话数据以会话标识号为键存在内存映射表中.
          • Server以客户给出的会话标识号取出会话数据.
          • 这种方式,需要足够的内存.且没有Server集群.
        • 不吧会话数据放在内存中,而是序列化后持久保存.
          • 序列化方式:二进制,文本(XML).
          • 持久化到哪里.
            • 最简单的是放在应用Server的文件系统或者本地数据库中.
            • 为了支持集群和故障恢复.需要放在公共访问的地方.如共享服务器.问题是需要更长的事件激活服务器.
          • 保存到DB中:以会话标识号为键值,序列化LOB来存放序列化后的会话状态.
            • 需要对作废的会话进行处理.
        • 应用服务器已经开始提供自动的支持.
          • .Net已经内建了会话状态功能的实现.
      • 使用时机
        • 最大的好处是简单,已有内建的支持.
        • 需要编程来实现会话维护.
    • DataBase Session State
      • 将会话数据作为已提交数据保存到DB中.
      • 运行机制
        • 会话的局部数据.即不能在整体提交到DB之前影响系统的其他部分的数据.
          • 在每个数据行上加上ispending来区分是否是会话数据.
          • 将会话ID保存为一个临时字段(先不存到DB中).查询时过滤SessionID不为空来获取真正的记录,来滤掉临时数据.
          • 使用临时表来暂存会话数据.当会话提交时再写会真实表.
        • 同时,需要在会话取消时有清除会话数据的机制.
      • 使用时机
        • DB会话状态和Server会话状态的唯一区别是会话数据是否存储在DB中.
          • 选择时,取决于便于集群和故障恢复的程度.
        • 性能.
          • 无状态的对象提供了Server性能,时缓冲和集群更容易.但是在处理每个请求时需要多花时间来进行DB读/写.
  • 相关阅读:
    .gitignore 文件无法提交
    关于对接需求的思考
    0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想
    Jenkins 新主题样式:jenkins-theme-v2.277
    根据swagger.json生成flutter model,暂无空安全支持
    centos下 连接sqlserver (provide:SSL Provider,error:31
    .net core 中实现一个堆结构
    .net 程序员的centos命令总结
    Spring Cloud 整合 Feign 的原理
    聊聊 Feign 的实现原理
  • 原文地址:https://www.cnblogs.com/robyn/p/3528447.html
Copyright © 2020-2023  润新知