在asp.net中采用以下几种机制来保存用户状态
一.使用浏览器的Cookie(Cookie只能保存字符窜)
1.Cookie
片列Cookie:
foreach(string strKey in Request.Cookies)
{
string strValue = Request.Cookies[strKey].Value;
Response.Write("<li>" + strKey + "=" +strValue +"</li>");
}
a.临时性的Cookie:又称会话Cookie,只保存在浏览器的内存中。当浏览器关闭的时消失。
创建方法
Response.Cookies["test"].Value = "CHN";
Response.Write(Response.Cookies["test"].Value);
b.持久性的Cookie:可以保持较长的一段时间,是保存在客户端硬盘上的。
创建方法
HttpCookie objCookie = new HttpCookie("test" , "CHN_Auberon");
objCookie.Expires = Convert.ToDateTime( "2009-4-5" );
Response.Cookies.Add(objCookie);
2.Cookie的属性
a.Domain ---- 与Cookie关联的域名:比如,cnblogs.com
b.Expires ---- Cookie的过期时间
c.HasKeys ---- 一个表示Cookie是否一个Cookie字典的bool值
d.Name ---- Cookie的名称
e.Path ---- 与Cookie关联的路径
f.Secure ---- 表示是否能通过加密的链接来发送Cookie的值。默认为flase
g.Value ---- 表示Cookie的值
h.Values ---- 一个表示存储在Cookie字典中的所有健(key)和值(value)对的NameValueCollection
二.使用会话状态(Session)
在默认状态下,当用户第一次访问ASP.NET的web站点的页面时,该Web站点就自动把一个会话Cookie添加到用户的浏览器。这个Cookie
名为_ASP.NET_SessionID,会为该用户以后访问这个Web站点来跟踪用户。
1.使用Session注意的几点
a.添加到会话章台的任何项在用户访问Web站点期间会一直存在,一直到用户关闭浏览器,或者用户超过20分钟还没有再次访问页面。
b.Session是存在与服务器的内存中的,并且每个用户的Session不同。
c.Session可以存储任何数据类型,并且大小不受限制。
2.处理会话事件(在Global.asax文件中)
Session_Start:会话开始时候
Session_End:会话结束(正常关闭浏览器或者会话超时时),可以用Session.Abandon()方法来结束会话。
3.禁止Session可以用Page.EnableSessionState=fasle来实现。
三.不依赖于Cookie的会话(将Cookie放到Url中...)
设跟踪会话置Web.Config
<configuration>
<system.web>
<sessionState cookieless="true" />
</system.web>
</configuration>
限制:当跳转URL的时候只可以用相对路径
如:
<a href="xx.aspx">xx</a>
<a href="yy/xx.aspx">xx</a>
<a href="../xx.aspx">xx</a>
上面的几个链接跳转正常
<a href="/xx.aspx">xx</a>
<a href="http://xx.aspx">xx</a>
这两个链接跳转会丢失会话状态。