实现会话持久化(Permanent Session)

session|session

  
//注意,需要引用System.Runtime.Serialization.Formatters.Soap.dll程序集 
public const string SESSIONDATAPATH = "C:\SessionData\" ;
private void Application_AcquireRequestState( object sender, EventArgs e)                           
 {     
       System.IO.FileStream fs; 
        System.Runtime.Serialization.Formatters.Soap.SoapFormatter sf  =  new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); 
        try 
        {  
            //获取特定的cookie,如果找不到,则退出.
            HttpCookie cookie = Request.Cookies["PermSessionID"]; 
            if(cookie == null) 
            {
                //如果找不到,则生成一个(使用伪随机的SessionID) 
               cookie = new HttpCookie("PermSessionID", Session.SessionID);
               //使该cookie在1星期之后到期
               cookie.Expires = DateTime.Now.AddDays(7);
               //将其发往客户端浏览器 
               Response.Cookies.Add(cookie); 
            }
             //文件名等于该cookie的值 
             string permSessionId = cookie.Value; 
             //生成数据文件的名称 
            string filename = SESSIONDATAPATH + permSessionId.ToString() + ".xml"; 
            //打开文件,如果出错,则退出 
            fs = new System.IO.FileStream(filename, IO.FileMode.Open); 
            //反序列化包含值的Hashtable Hashtable ht = (Hashtable)sf.Deserialize(fs); 
            //将数据移到Session集合中 
            Session.Clear(); 
            foreach( string key in ht.Keys )
            {
                Session(key) = ht(key); 
            }
      } 
     Catch(Exception ex) {} 
      Finally 
      {
           if( fs != null ) fs.Close();
      } 
}
         以上代码实现了会话持久话的过程,AquireRequestState事件处理程序中的代码会试图读取一个名为PermSessionID的特殊的客户端cookie。该cookie的值被视为一个XML(在服务器上)的名称,该XML文件包含在前一个请求结束时保存下来的Session变量的值,因此代码会在页面看到新值之前填充Session集合。如果该cookie尚不存在,说明现在看到的是从客户端发出的第一个请求。所以代码会创建cookie,并在其内部存放独一无二的字符串。同时也应该在ReleaseRequestState事件里创建一个服务端的XML文件,将所有Session变量序列化到该XML文件中。

时间: 2024-08-14 07:03:05

实现会话持久化(Permanent Session)的相关文章

深入理解HTTP会话控制: PHP Session与Cookie

本文介绍了PHP会话控制,主要阐述以下几点内容: • 会话控制的产生背景/概念 • cookie的维护与生命周期(有效时间) • session的维护与生命周期(回收机制) • cookie与session之间的区别与联系 • 问题1:禁用cookie后session为什么会失效? • 问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常) • session.cookie简单实例 .session配置方法 .session安全设置 ●

【会话】V$SESSION视图

[会话]V$SESSION视图 讲到Oracle的会话,就必须首先对V$SESSION这个视图中的每个列都非常熟悉.该视图在Oracle 11gR2下包含97列,在Oracle 12cR2下增加了6列,共包含103列.下面作者以表格的形式对这个视图中的重要列做详细说明. 表 3-26 V$SESSION视图 V$SESSION displays session information for each current session. 视图列序号 列 数据类型 说明 官方解释 备注 1 SADD

从ASP迁移至ASP+ --处理会话变量(Session Variables)

asp+|session|变量 现存的ASP版的eVille禁止对站点的某些部分的访问,除非用户已经登录.一些功能像查看将来的优惠特价,报名上课,以及了解自己当前的入学状况是受限制区域.如果想在未登录的状态下访问这类区域,你只会被重新导回到登录页面.用户在一份表格中输入他们的用户名与密码,然后与数据库的学生表进行比较,如果登录成功,一个名为blnLoggedIn的会话变量便被设为真.这种方法对这个站点是有效的,因为它架设在一台单一的服务器上.其它的方法将被用于web farms上的web应用程序

[转自MSDN]可靠会话(Reliable Session)的最佳实践

一.设置 MaxTransferWindowSize Windows Communication Foundation (WCF) 中的可靠会话使用传输窗口保存客户端和服务上的消息.可配置属性 MaxTransferWindowSize 指示传输窗口可以保存多少条消息. 在发送方,这指示在等待确认消息时传输窗口可以保存多少条消息,在接收方,则指示为服务缓冲多少条消息. 选择合适的大小可影响使用网络的效率以及运行服务的最佳容量.以下各节将详细介绍选择此属性的值时要考虑的事宜以及值的影响. 默认传输

PHP会话控制:Session与Cookie详解_php实例

本文介绍了PHP会话控制,主要阐述以下几点内容: • 会话控制的产生背景/概念 • cookie的维护与生命周期(有效时间) • session的维护与生命周期(回收机制) • cookie与session之间的区别与联系 • 问题1:禁用cookie后session为什么会失效? • 问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常) • session.cookie简单实例 理解会话控制的概念 理解一个概念就需要理解他的背景及产生

PHP session会话操作技巧小结_php技巧

本文实例总结了PHP session会话操作技巧.分享给大家供大家参考,具体如下: 会话技术 session 将会话数据存储与服务器端,同时使会话数据可以区分浏览器 为每个会话数据建立独立的会话数据区(来存储当前会话的全部数据),每个会话数据区存在唯一的标志,同时浏览器端存储该唯一标识配对使用. 响应时给浏览器的session-id值也存储于浏览器端的cookie数据区. php.ini: session.auto_start = 0 session_start(); 增删改查都是使用$_SES

zf框架的session会话周期及次数限制使用示例

 这篇文章主要介绍了zf框架的session会话周期及次数限制使用示例,需要的朋友可以参考下 代码如下: <?php require_once("Zend/Loader.php"); Zend_Loader::loadClass("Zend_Session_Namespace"); $Session = new Zend_Session_Namespace('Db'); $Session ->host     = '127.0.0.1'; $Sessio

会话session在servlet中和tcp会话中指的含义相同么

问题描述 会话session在servlet中和tcp会话中指的含义相同么 最近看servlet,里面用HttpSession来新建会话,这个session和网络说的tcp会话不是一个含义吧.感觉只要使用http就必然是一个tcp会话,而servlet里的session是要自己建立的,并可以选择不建.另外,说tcp会话的握手啊,创建和关闭什么的在javaweb中有没有体现啊,是不是就不在一个网络层中的事.servlet中的session一旦浏览器关闭就自动关闭了,cookie里的sessioni

JavaWeb Session 会话管理实例详解_java

Session会话简介 会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程. 会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息. 当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况).再次打开新的浏览器,将开始一个新的会话. 类javax.servlet.http.HttpSession.每一个HttpSession代表用户的一个会话. 每一个Session的过期时间默认为30分钟. 当浏览器第一次访