不同激励方式的优缺点 详解ASP.NET 状态管理方式优缺点
详解ASP.NET 状态管理方式优缺点
现在ASP NET程序员可以使用很多种方式来保存用户请求信息 下面主要介绍ASP NET关于状态管理的几种方式
一般而言 HTTP协议是非状态服务 它不保存任何用户请求信息 直至NetScape开始使用Cookies来保存用户请求信息 Web应用程序有了极大的发展 现在ASP NET程序员可以使用很多种方式来保存用户请求信息
下面主要介绍ASP NET关于状态管理的几种方式
客户端
ASP NET 提供了Cookies QueryStrings (URL) Hidden fields View State and Control state (ASP NET ) 来管理客户端请求
一 Cookie
Cookie是以文本存储于计算机中 使用name value匹配 一般用户存储标识用户信息 如 用户名 用户使用配置等 虽然Cookie可以被加密存储 但不推荐在Cookie中保存用户密码 第二 Cookie的大小是限定的 所以不适合存储大型数据
Example
获取用户ID
if (Request Cookies[ UserId ] != null) lbMessage text = Dear + Request Cookies[ UserId ] Value + Wele to our website! ; else lbMessage text = Guest wele to our website! ;
设置Cookie
Response Cookies[ UserId ] Value=username;
优点
使用简单
缺点
客户端可以禁用Cookie
Cookie在每次请求或发送时都会被加载 影响传输
易被攻破 所有不适合存储安全信息
二 Hidden fields(隐藏控件)
Hidden field是在页面级保存信息 与其他用户标准控件的区别是 Hidden Field不被呈现在页面中 当页面提交的时候 Hidden Field中的值将被一同发送给服务端 虽有在ASP NET 中 我们可以使用ViewState来代替 但Hidden Fields依然可以用来存放一些不关键信息
protected System Web UI HtmlControls HtmlInputHidden Hidden ; //to assign a value to Hidden field Hidden Value= Create hidden fields ; //to retrieve a value string str=Hidden Value;
优点
使用简单
可以存储少量数据
缺点
不安全 以明文的形式直接从网络传输
三 View State(状态视图)
状态视图ViewSate 可以用来为单独用户存储信息 你可以通过设置EnableViewState属性来控制ViewState的使用 在默认的情况下属性值为True ViewSate在每次用户请求或服务端响应时 都会被传输 所以 为了减少网络带宽的使用 可以在不需要状态视图时设置EnableViewState属性值为False ViewSate在页面中的存储是经过Base 转码的 增加了额外的数据量 所以一定要注意保存较少的ViewSate
// Add item to ViewState ViewState[ myviewstate ] = myValue; //Reading items from ViewState Response Write(ViewState[ myviewstate ]);
优点
操作简单
被加密
可以在控件级别使用
缺点
加密编码增加了页面的大小
增价了网络传输
四 Query strings
Query String常用于页面传值 很多浏览器都会有长度限制 一般在 个字节 值得注意的是 尽量使用Server UrlEncode 来避免一些意外情况 如Sql注入
string productid;productid=Request Params[ productid ]
服务端
一 Application
Application在整个应用程序都是可见的 所有用户分享同一个Application 在ASP中 常用来存放链接字符串
Application Lock(); Application[ mydata ]= mydata ; Application UnLock();
二 Session
Session为每个用户单独存储用户信息 Session有三种存放方式 inproc sqlserver stateserver
InProc 数据保存在服务端进程中 由于目前有 M的内存限制 可以导致进程重启 而失去所有的状态信息
SqlServer 存放与数据库之中 用户状态可以永久保留

StateServer 存放与另一台状态服务器中
Session[ UserId ]= UserId ; string UserId = Session[ UserId ] ToString();
lishixinzhi/Article/program/net/201311/11294