编程高手 ASP.NET 状态管理
一般而言,HTTP协议是非状态服务,它不保存任何用户请求信息。直至NetScape开始使用Cookies来保存用户请求信息,Web应用程序有了极大的发展。现在ASP.NET程序员可以使用很多种方式来保存用户请求信息。 www.520diannao.com% c* U U' l/ G- c
下面主要介绍ASP.NET关于状态管理的几种方式。
: @# L/ k8 m" a9 \; x/ V: ?& Fwww.520diannao.comwww.520diannao.com2 Z* F6 M" j6 C* `. p- y* T
客户端
- w; E$ p6 r9 Z! h打造最好的电脑自学交流论坛ASP.NET,提供了Cookies, QueryStrings (URL), Hidden fields, View State and Control state (ASP.NET 2.0),来管理客户端请求。 打造最好的电脑自学交流论坛/ r, X; ^: v$ j4 n
4 @! P9 I$ X! Y$ `# {/ iwww.520diannao.com一。Cookie 我爱电脑技术论坛- ^+ O4 u+ k0 g S
* \; B+ T+ u' k& ~3 u, s
Cookie是以文本存储于计算机中,使用name-value匹配。一般用户存储标识用户信息,如:用户名,用户使用配置等。虽然Cookie可以被加密存储,但不推荐在Cookie中保存用户密码。第二,Cookie的大小是限定的,所以不适合存储大型数据。 我爱电脑技术社区--打造最好的电脑技术自学交流平台* T$ t$ \; f! |1 E k
Example:
) x- x! R q7 n4 M! I打造最好的电脑自学交流论坛1。获取用户ID 3 }$ V) F3 Z; \. \- U& N1 j
if (Request.Cookies["UserId"] != null)
+ M$ c8 F, d8 `4 _9 Z$ Swww.520diannao.comlbMessage.text = "Dear" + Request.Cookies["UserId"].Value + ", Welcome to our website!";
2 a, [; V' T# _ t( Q- Jwww.520diannao.comelse 我爱电脑技术社区--打造最好的电脑技术自学交流平台/ r+ c% W D$ S, I0 j. i6 L3 E
lbMessage.text = "Guest,welcome to our website!";
2 W& g9 Z! Z& F: ^# \# }我爱电脑技术论坛2。设置Cookie
, K4 q7 a+ ^% l6 M' X我爱电脑技术论坛Response.Cookies["UserId"].Value=username;
8 o+ q2 U, z& D4 |3 i9 N( G6 S打造最好的电脑自学交流论坛优点:
& y/ [% ]/ x1 l3 i2 I6 ^, a使用简单 www.520diannao.com; h: s# R& R# _: y) v( B3 \
缺点:
$ N6 K M4 } n8 B电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站1。客户端可以禁用Cookie 打造最好的电脑自学交流论坛7 J1 U6 R4 ~( e3 x, U# J2 o
2。Cookie在每次请求或发送时都会被加载,影响传输。 打造最好的电脑自学交流论坛" A2 {& N& h/ x. t* o2 R5 S
3。易被攻破,所有不适合存储安全信息。
8 f6 `! I4 w+ \3 W4 S7 `( J打造最好的电脑自学交流论坛+ J, F! _: c/ D, |
二。Hidden fields(隐藏控件) 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ k& r) z2 H: U
Hidden field是在页面级保存信息。与其他用户标准控件的区别是,Hidden Field不被呈现在页面中。当页面提交的时候,Hidden Field中的值将被一同发送给服务端。虽有在ASP.NET 2.0中,我们可以使用ViewState来代替,但Hidden Fields依然可以用来存放一些不关键信息。
$ ^$ x! d5 C% ?8 Q9 v9 g我爱电脑技术论坛
* N s; x: z" n. lprotected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;
X' I% | v2 e3 i电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
8 l" Y) K, S% z* `//to assign a value to Hidden field
# q+ j& z/ m5 t3 R电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; G6 V$ W r! F! q" l; F( P+ E' n
Hidden1.Value="Create hidden fields";
) W/ I3 i+ l& M8 k打造最好的电脑自学交流论坛$ @& n K1 k' X0 t
//to retrieve a value 打造最好的电脑自学交流论坛9 Q7 J/ r m- c! P$ U2 g! h* N
我爱电脑技术论坛/ F+ O$ T. c5 S4 o9 f" P
string str=Hidden1.Value; 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站1 T! |( D% B3 x# J. q' Q# O
" z' o4 I ^: k* t% _我爱电脑技术论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, J1 ^, S4 }# \) \! v' A
优点: www.520diannao.com/ A2 H3 c! `1 p0 `, o
1。使用简单
) T( @7 |+ R3 F# K$ i我爱电脑技术社区--打造最好的电脑技术自学交流平台2。可以存储少量数据
& U& b+ |/ k- D0 b/ o- I$ d我爱电脑技术社区--打造最好的电脑技术自学交流平台缺点: 我爱电脑技术社区--打造最好的电脑技术自学交流平台0 |) z$ T7 j; R5 F0 i) u
1。不安全,以明文的形式直接从网络传输
" s: j( B/ U. V; ]6 C# e我爱电脑技术论坛
4 f& [9 G o/ Y我爱电脑技术社区--打造最好的电脑技术自学交流平台三。View State(状态视图)
. U. w- g* [8 Q+ P+ Y: H$ S打造最好的电脑自学交流论坛www.520diannao.com, {7 d, D3 J! d- ~! K" p6 w
状态视图ViewSate,可以用来为单独用户存储信息。你可以通过设置EnableViewState属性来控制ViewState的使用,在默认的情况下属性值为True。ViewSate在每次用户请求或服务端响应时,都会被传输。所以,为了减少网络带宽的使用,可以在不需要状态视图时设置EnableViewState属性值为False。ViewSate在页面中的存储是经过Base64转码的,增加了额外的数据量,所以一定要注意保存较少的ViewSate。
* i* p _ u1 p0 f! A电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ m; l1 J3 s( ^! g; S7 H
我爱电脑技术论坛 Y. k! h! P$ }; ?
// Add item to ViewState 我爱电脑技术论坛1 S. l! c( f+ R0 {
我爱电脑技术论坛% t) o C4 i, `* p) ]: V
ViewState["myviewstate"] = myValue; 5 S3 T' G( V6 @6 U) a) L
" r" o/ H& v" `, a! C
//Reading items from ViewState
/ r6 A2 j4 [5 Q6 E+ l电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站Response.Write(ViewState["myviewstate"]); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* s6 [: d+ j+ s! M' M6 L
优点: 我爱电脑技术社区--打造最好的电脑技术自学交流平台; O' |$ o. s9 A; |" O7 L
& `. P Y4 f! H5 S0 H' @- } `操作简单
2 n3 @. L; H2 X( L" k$ o电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站被加密 . A2 C5 l; n2 o
可以在控件级别使用 www.520diannao.com- l; {. n% y1 b4 g
缺点: 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 u2 A3 W0 M) ~" ^3 }
' K5 \6 a t6 K- P, e5 O/ [, S9 D% o2 _打造最好的电脑自学交流论坛加密编码增加了页面的大小
+ f* ]+ b& Q0 S电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站增价了网络传输 打造最好的电脑自学交流论坛7 ~, T9 _) {; A1 N% z: q+ s
打造最好的电脑自学交流论坛2 Y8 L5 w1 }4 F( H/ k
四:Query strings 7 ~- j& \! Y- U. Y+ y
我爱电脑技术社区--打造最好的电脑技术自学交流平台; O3 f' ^) D; D0 p: T
Query String常用于页面传值。很多浏览器都会有长度限制,一般在255个字节。值得注意的是,尽量使用Server.UrlEncode,来避免一些意外情况,如Sql注入。 我爱电脑技术社区--打造最好的电脑技术自学交流平台- v0 N4 N0 j0 V
string productid;
. q5 i" _' N7 C5 M( E! d我爱电脑技术社区--打造最好的电脑技术自学交流平台productid=Request.Params["productid"] 我爱电脑技术社区--打造最好的电脑技术自学交流平台% ~4 x) W2 r# D
0 _- w% B4 ` `4 N8 `打造最好的电脑自学交流论坛服务端 打造最好的电脑自学交流论坛- b( h6 A, W* q$ c1 n% M- b+ J5 [
一。Application
' v3 B) I2 Z# T: ?我爱电脑技术论坛Application在整个应用程序都是可见的,所有用户分享同一个Application。在ASP中,常用来存放链接字符串。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# J2 R6 [# j& i$ W& I( q
www.520diannao.com6 j0 p& d# h/ S/ ] w; B! t5 d+ x
Application.Lock();
, E' X; M2 q {8 }2 l( G2 S2 F& Xwww.520diannao.com
& U% T' j$ [ l; e4 r1 m- |) ]电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站Application["mydata"]="mydata";
; s* g( t+ z. j6 W$ G( m$ i& E我爱电脑技术社区--打造最好的电脑技术自学交流平台
/ p5 ]: v/ s( ?* l6 G( M8 e5 o0 E# s电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站Application.UnLock();
* H& a! z7 A( o Z' @' d! b打造最好的电脑自学交流论坛
8 _( |# W+ Z. Y# [/ u X5 l我爱电脑技术社区--打造最好的电脑技术自学交流平台
' ?6 B. c9 f' m我爱电脑技术社区--打造最好的电脑技术自学交流平台二。Session , K* h" Z- N1 b- K( X
Session为每个用户单独存储用户信息。Session有三种存放方式。"inproc" , "sqlserver" , "stateserver。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ B2 s+ X m9 [& J; Y
InProc,数据保存在服务端进程中。由于目前有600M的内存限制,可以导致进程重启,而失去所有的状态信息。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; J+ g* n7 F; A) X0 k, E8 \
SqlServer,存放与数据库之中,用户状态可以永久保留。
! c9 O) L* M4 m+ a' Ywww.520diannao.comStateServer,存放与另一台状态服务器中。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# B7 i- ]6 k+ `# `8 Q9 c- ]
" c, U q6 I4 S! b a我爱电脑技术社区--打造最好的电脑技术自学交流平台Session["UserId"]="UserId"; 打造最好的电脑自学交流论坛0 c! A4 g5 v# d2 J) \ q+ U
string UserId = Session["UserId"].ToString();