当前位置:首页 » 网站技术 » ASP.NET

ASP.NET状态管理方式及其优缺点

...

一般而言,HTTP协议是非状态服务,它不保存任何用户请求信息。直至NetScape开始使用Cookies来保存用户请求信息,Web应用程序有了极大的发展。现在ASP.NET程序员可以使用很多种方式来保存用户请求信息。

现在ASP.NET程序员可以使用很多种方式来保存用户请求信息。下面介绍和比较ASP.NET状态管理的几种方式及其优缺点。

客户端

ASP.NET提供了Cookies, QueryStrings (URL), Hidden fields(隐藏控件), View State and Control state (ASP.NET 2.0)等来管理客户端请求。

一 Cookie

Cookie是以文本存储于计算机中,使用name-value匹配。一般用户存储标识用户信息,如:用户名,用户使用配置等。虽然Cookie可以被加密存储,但不推荐在Cookie中保存用户密码。第二,Cookie的大小是限定的,所以不适合存储大型数据。

Example:

1.获取用户ID

if (Request.Cookies["UserId"] != null)
lbMessage.text = "Dear" + Request.Cookies["UserId"].Value + ", Welcome to our website!";
else
lbMessage.text = "Guest,welcome to our website!";

2.设置Cookie

Response.Cookies["UserId"].Value=username;

优点:使用简单

缺点:

1.客户端可以禁用Cookie

2.Cookie在每次请求或发送时都会被加载,影响传输。

3.易被攻破,所有不适合存储安全信息。

二 Hidden fields(隐藏控件)

Hidden field是在页面级保存信息。与其他用户标准控件的区别是,Hidden Field不被呈现在页面中。当页面提交的时候,Hidden Field中的值将被一同发送给服务端。虽有在ASP.NET 2.0中,我们可以使用ViewState来代替,但Hidden Fields依然可以用来存放一些不关键信息。

protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;
//to assign a value to Hidden field
Hidden1.Value="Create hidden fields";
//to retrieve a value
string str=Hidden1.Value; 

优点:

1.使用简单

2.可以存储少量数据

缺点:不安全,以明文的形式直接从网络传输

三 View State(状态视图)

状态视图ViewSate,可以用来为单独用户存储信息。你可以通过设置EnableViewState属性来控制ViewState的使用,在默认的情况下属性值为True。ViewSate在每次用户请求或服务端响应时,都会被传输。所以,为了减少网络带宽的使用,可以在不需要状态视图时设置EnableViewState属性值为False。ViewSate在页面中的存储是经过Base64转码的,增加了额外的数据量,所以一定要注意保存较少的ViewSate。

// Add item to ViewState
ViewState["myviewstate"] = myValue;
//Reading items from ViewState
Response.Write(ViewState["myviewstate"]);

优点:

1.操作简单

2.被加密

3.可以在控件级别使用

缺点:

1.加密编码增加了页面的大小

2.增加了网络传输

四 Query strings

Query String常用于页面传值。很多浏览器都会有长度限制,一般在255个字节。值得注意的是,尽量使用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,数据保存在服务端进程中。由于目前有600M的内存限制,可以导致进程重启,而失去所有的状态信息。

SqlServer,存放与数据库之中,用户状态可以永久保留。

StateServer,存放与另一台状态服务器中。

Session["UserId"]="UserId";
string UserId = Session["UserId"].ToString();

继续阅读
ASP.NET进度条
没有数据时显示GridView表格
ASP.NET中的换行问题解决方案
ASP.NET跳转页面方法比较
ASP.NET内置功能抵御Web攻击
ASP.NET写文件实例
ASP.NET页面间值传递方法实例
使用ASP.NET备份和还原SQL Server及Access数据库
ASP.NET日期与时间处理
发表评论

昵称:
最新评论
暂时没有评论!