由于浏览器是无状态的,及浏览器无法保存用户的一些信息,在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["test0"].Value = "CHN";
  Response.Write(Response.Cookies["test0"].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>
 这两个链接跳转会丢失会话状态。

posted on 2007-04-11 09:19  qy  阅读(2481)  评论(10编辑  收藏  举报