[ASP.NET]91之ASP.NET由浅入深 不负责讲座 Day11 – User State

[ASP.NET]91之ASP.NET由浅入深 不负责讲座 Day11 – User State


前言
介绍完使用JavaScript与user的交互之后,
接着就是在网页上,通常我们会需要暂时记录一些值,可能只有这一页,可能只有这一个连线,可能需要跨页,可能整个web site都是同一份,
所以我们需要了解,在ASP.NET除了把值存入DB以外,还有哪些方式可以辅助我们记值。
他们的取舍平衡点、适用情况、该注意的问题有哪一些。

之前也有先整理一篇部分的,这边也先附上来当参考,[ASP.NET]ViewState、Session、Cookies、Application State比较
不过为了避免分两份,所以我这一篇重点是在完整性,就不管两篇文章重复的部分了。


  1. ViewState
    • 只存在于正在执行那一页,通常用于postback记值(因为http无状态)。
    • 原理是HTML上的hidden field,会透过Base-64编码
    • webconfig里可以透过设定来加密:
    • 通常server control会透过viewstate来保存其属性值,也是传统ASP.NET web form重整页面最容易碰到的效率问题。可透过EnableViewState属性开关。
    • 可存放可序列化的Object (一般程序用到普遍最大的应该也只是hash table吧 )
  2. Session
    • 可存在于该连线,不同页面,通常用来跨多页传些比较重要、需要安全的值。如果是前后页面关连性的值,只需要用URL parameter即可。Session的意义比较像是在什么样的情况下,开始或变更了某个Session的值。
    • 类似跨网页的全域变量
    • 占用Server端内存,连线数量一暴增,内存很可能被操挂。
    • 默认存在内存里,可以改存在Session State Server或DB。(如果放在Session State Server或者DB,存放的对象也必须是可序列化的)
    • 可设定存活时间,但发生错误或特定情况时,会导致Session遗失。请参考:http://www.dotblogs.com.tw/hatelove/archive/2009/12/25/sessionmiss.aspx
  3. Cookies
    • 单一使用者,存在client端,读的到就活着。
    • 需注意安全性考量,通常用在个人化portal或profile。
    • 有些single sign on会透过cookie(加密)来存放账号资讯。
    • String格式存放。
  4. Cache
    • 吃Server内存。
    • 可设定时间、hit rate或先进先出来当作条件。
    • 通常应用在静态网页缓存。
  5. Application
    • 在Server上所有User存取同一份。
    • 当Web application重起或关闭时结束。
    • 吃Server内存。
  6. QueryString
    • 串在Url?后面那一串,key-value pair,每一组key-value pair用&区隔,例如url?key1=value1&key2=value2,value应该要经过UrlEncode编码,避免错误
    • 如有重要资讯,可能要经过加密传递
    • Url有长度限制
    • 用Request.QueryString[key]就可以得到该Key的Value
  7. Config file & Resource file
    • webconfig
      • 比较常用的是AppSetting:
        取值WebConfigurationManager.AppSettings.Get("AppCode")
        XML设定:
      • 
        
            
            
        

      • 自订webconfig区段
        1. [ASP.NET]撰写自己的 Configuration 区段 Part 1:不要再赖在 appSettings 的屋檐下了,写个自己的 Configuration 区段吧~
        2. [ASP.NET]撰写自己的 Configuration 区段 Part 2: 将自己的组态组织成一个 Group
        3. [ASP.NET]撰写自己的 Configuration 区段 Part 3: 自订组态集合
    • Resource file: Resources.你的Resource文件名.ResourceManager.GetString(你的key)


参考资源:
Nine Options for Managing Persistent User State in Your ASP.NET Application

managingPersistentUserState_thumb[2]

 



 最后,请想学习的客倌,看完这篇文章思考一下,下列的问题该如何回答:

  1. ViewState的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?
  2. Session的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?
  3. Cookies的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?
  4. Cache的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?
  5. QueryString的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?
  6. Config file & Resource file的适用情况,需考虑的情况,什么东西可以放进去,存在于哪里,只能存在多久?

或许您会对下列培训课程感兴趣:

  1. 2019/7/27(六)~2019/7/28(日):演化式设计:测试驱动开发与持续重构 第六梯次(中国台北)
  2. 2019/8/16(五)~2019/8/18(日):【C#进阶设计-从重构学会高易用性与高弹性API设计】第二梯次(中国台北)
  3. 2019/9/21(六)~2019/9/22(日):Clean Coder:DI 与 AOP 进阶实战 第二梯次(中国台北)
  4. 2019/10/19(六):【针对遗留代码加入单元测试的艺术】第七梯次(中国台北)
  5. 2019/10/20(日):【极速开发】第八梯次(中国台北)

想收到第一手公开培训课程资讯,或想询问企业内训、顾问、教练、咨询服务的,请洽 Facebook 粉丝专页:91敏捷开发之路。