第四章 设计程序架构 之 状态管理

1. 概述

  本章内容包括 如何选择状态管理架构、考虑扩展性、使用cookie和本地存储保存状态、web.config中的配置 以及 实现sessionless状态。

2. 主要内容

  2.1 选择状态管理架构

    ① 首先需要考虑的问题是,你是否真的需要保存状态。无状态使得站点可以处理更多的并发访问。

    ② web forms 中有多种方式保存状态。最主要的就是ViewState。使用隐藏域来实现状态信息的传递。

    ③ MVC4程序中,状态信息可以保存在以下位置:Cache、Session、Cookies、QueryString、Context.Items、Profile。

    ④ 可以通过继承 SessionStateStoreProviderBase 类来自定义session管理。

  2.2 考虑扩展性

    ① 相对于传统的ASP.NET,ASP.NET MVC 可以创建简洁干净的Html输出。可以更好的适配需要html交互的环境。

    ② 可以使用 OutProc,  StateServer,  SQLServer session 或者 sessionless 方案。

      web farm中,可以使用OutProc方案。

      sessionless方案使用,取决于状态信息保存在哪里。保存在客户端,需要额外的客户端编码,并且需要检查浏览器的版本(是否支持)。

      保存在服务端的典型案例是Profile的使用。里面保存了授权用户的信息。

    ③ ASP.NET MVC4 提供了支持可扩展性的多个特性。通过Routing和Model捕获,提供了对sessionless的支持。

     还可以把各层封装成独立的组件,在各个服务器间公用。

  2.3 使用cookies或者本地存储来保存状态信息

    cookies是HTML5 Web Storage的前身,HTML5 的 web storage API,可以提供更简洁方便的操作。

    HTML5 web storage 提供了 sessionStorage 和 localStorage 两个对象供使用。

    sessionStorage可以在同一域名的网页间传递保存的数据,前提是浏览器窗口没有关闭。

    localStorage 可以在同一域名的网页间传递保存的数据,作用域更大。不受浏览器窗口的限制。

    The HTML5 Web Storage API 还支持事件。可以在localStorage信息变化时通知注册事件的多个页面。不会通过服务端。

    浏览器兼容是需要考虑的问题,可以在服务端和客户端都放置检测代码。

  2.4 在web.config中配置

<system.web> 
    <sessionState mode="InProc" cookieless="false" timeout="20" 
        sqlConnectionString="data  
        source=127.0.0.1;Trusted_Connection=yes" 
        stateConnectionString="tcpip=127.0.0.1:42424"   
    /> 
</system.web>
<system.web> 
    <sessionState mode="StateServer" 
       stateConnectionString="192.168.1.103:42424" /> 
</system.web>
<profile defaultprovider="DefaultProfileProvider"  
    inherit="MyApplication.Models.CustomProfile"/>

   2.5 实现sessionless状态

    sessionless状态 指的是 在不支持任何session模式的情况下保存状态。

     ASP.NET MVC 4 中在请求间传递信息的几种方式:

    ① 用户第一次访问时,在服务端创建并保存,然后传递。

    ② 使用隐藏域保存并传递。

    ③ 可以在布局页或者母版页中创建,在内容页中共享。

    ④ 添加Javascript方法保存信息。只要确保需要的时候添加了引用。就不用担心信息会丢失。

    ⑤ 在查询字符串(query string)中保存信息。

    ⑥ 在Url中保存信息。

3. 总结

  ① 状态管理是软件程序的重要组成部分。因为http的无状态天性,增加了web程序中的状态管理的难度。

      ASP.NET MVC4中提供了多种方案供选择。

  ② session是保存状态最常用的一种方式。session可以被配置为保存在sqlserver或者独立的状态服务器上,还可以配置为将sessionid放到cookie中或者作为query string 的一部分。 

  ③ query string 也是一个可以保存状态信息的地方。适用于安全性要求不高的,数据量较小的情况。

  ④ 也可以把状态信息完全保存在客户端。使用HTML5 Web Storage API。但是ASP.NET MVC4 对JQuery的支持要更好。

  ⑤ 扩展性也是影响状态保存方案的主要因素。

posted @ 2015-07-23 17:51  stone lv  阅读(277)  评论(0编辑  收藏  举报