好学IT学院:IT信息技术分享交流平台
标签:.NET  来源:blog.csdn.net  作者:mySingle.cn  发布时间:2009-03-13  ★★★加入收藏〗〖手机版
跨站点共享Session解决方案、单点登录解决方案(.NET 2.0版本)
摘要:我们在进行Web开发时经常会用到Session,用它去标识不同的会话,那么涉及到跨站点的时候如何实现Session共享呢?…

内容提示:我们在进行Web开发时经常会用到Session,用它去标识不同的会话,那么涉及到跨站点的时候如何实现Session共享呢?

通常的解决方案有:使用数据库、使用Cookies做中间桥等等。

下面介绍一种基于ASP.NET 2.0的,通过序列化和反序列化机制实现的一种解决方案。

首先看一下通常的服务器集群的网络拓扑结构:

利用序列化机制实现Session共享的原理:

1、Web Server 1的应用程序序列化Session信息为文本值(可以是Binary或Soap格式)
2、将序列化后的值写入文件,保存到File Server上
3、Web Server 2 对保存在File Server上的Session序列化后的值进行反序列化
4、在Web Server 2上重新构建Session值

下面我们来详细看看实现代码,分以下几个步骤:

1、创建一个类库工程:ShareSession

引入以下的命名空间:

System.configuration
 System.Runtime.Serialization.Formatters.Soap
 System.Web

2、创建一个类:SessionEntity

代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ShareSession
...{
  /**//* *****************************
  *
  *  Author  :  Xiaojun Liu
  *  Create Date :  2007.11.09
  *  Description :
  *
  * *****************************
  */

[Serializable]
  public class SessionEntity
  ...{      
    [NonSerialized]
    public string AUTH_GUID = "";

private Hashtable _HtShareSession;

public Hashtable HtShareSession
    ...{
      get
      ...{
        return this._HtShareSession;
      }
      set
      ...{
        this._HtShareSession = value;
      }
    }

public SessionEntity(string guid)
    ...{
      this.AUTH_GUID = guid;
    }    
  }//
}//