ASP.NET实现多域名多网站共享Session值的方法

ASP.NET实现多域名多网站共享Session值
1、实现功能:可设置哪些站点可以共享Session值,这样就防止别人利用这个去访问
  要想实现这个功能就必须得把Session值 放入数据库中, 所有我们先在VS命令工具下注册一个
命名如下:aspnet_regsql.exe -S [数据库服务地址] -E -ssadd 具体格式请参考 /?
添加成功后我们休要对ASP.NET生成的存储过程进行简单的修改,
打开ASP.net为我们创建的数据库“ASPState” 找到存储过程“TempGetAppID”
然后修改存储过程如下:


代码如下:

USE [ASPState]
GO
/****** Object: StoredProcedure [dbo].[TempGetAppID] Script Date: 11/21/2011 16:15:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[TempGetAppID]
@appName tAppName,
@appId int OUTPUT
AS
SET @appName = LOWER(@appName)
SET @appId = NULL
set @appId=640732509 --这个是我自己测试时写死的 你可以通过系统数据库tempdb中的ASPStateTempApplications查询到站点appId 记住只有当网站的Seeion配置是数据库中 而且保存过一次Session值才能查询的到
/*
--SELECT @appId = AppId
--FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName
以上注释办法为原来ASP.net 自动生成的
*/
IF @appId IS NULL BEGIN
BEGIN TRAN
SELECT @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX)
WHERE AppName = @appName
IF @appId IS NULL
BEGIN
EXEC GetHashCode @appName, @appId OUTPUT
INSERT [tempdb].dbo.ASPStateTempApplications
VALUES
(@appId, @appName)
IF @@ERROR = 2627
BEGIN
DECLARE @dupApp tAppName
SELECT @dupApp = RTRIM(AppName)
FROM [tempdb].dbo.ASPStateTempApplications
WHERE AppId = @appId
RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
18, 1, @appName, @dupApp)
END
END
COMMIT
END
RETURN 0

这个就可以共享了,但我们还得解决一个问题就是替换客户端的SeeionID ,我们可以添加一个处理程序来利用SessionIDManager类来进行处理,
实例我就不写了,我值写个替换的方法


代码如下:

SessionIDManager sessionid = new SessionIDManager();
bool a;
bool b;
sessionid.SaveSessionID(this.Context, "这里是SeeionID", out a, out b);

最后修改配置文件
在System.Web节点下添加 <sessionState mode="SQLServer" sqlConnectionString="data source=数据连接;user id=sa; password=123456;" ></sessionState>
ok 一切搞定 你去试试把

(0)

相关推荐

  • ASP.NET中在不同的子域中共享Session的具体方法

    今天遇到了这个问题,于是研究了一下.要解决这个问题,首先就要明白一些Session的机理.Session在服务器是以散列表形式存在的,我们都知道Session是会话级的,每个用户访问都会生成一个Session.那么服务器是怎么区分不同用户的Session?又是怎么将不同用户的Session与不同的用户绑定的呢?下面我们来研究一下,以下纯属我个人的理解,如有错误请指证. Session在服务器端是以散列表的形式存在的,区分每一个Session是通过SessionID来实现的,所以可以说这个Sess

  • Asp.net中处理一个站点不同Web应用共享Session的问题

    1.问题描述: 系统S中有M1,M2,M3,M4四个模块,每个模块都是一个web应用.其中一个模块中设置Session后在其他模块中无法读取. 2.问题原因: 一个WEB应用相当于一个站点,应用与应用之间不可能共享Session. 3.解决方法: 1)  将四个web应用包含在同一个解决方案中 (注:调整.webinfo文件使解决方案能构正常运行) 2) 新建一个web应用Main,该web应用包含在解决方案S中,并直接存放在S目录下(即与虚拟目录S相对应). 3) 在Main应用中添加其他四个

  • ASP.NET实现多域名多网站共享Session值的方法

    ASP.NET实现多域名多网站共享Session值 1.实现功能:可设置哪些站点可以共享Session值,这样就防止别人利用这个去访问 要想实现这个功能就必须得把Session值 放入数据库中, 所有我们先在VS命令工具下注册一个 命名如下:aspnet_regsql.exe -S [数据库服务地址] -E -ssadd 具体格式请参考 /? 添加成功后我们休要对ASP.NET生成的存储过程进行简单的修改, 打开ASP.net为我们创建的数据库"ASPState" 找到存储过程&quo

  • 用PHP实现多服务器共享SESSION数据的方法

    PHP 实现多服务器共享 SESSION 数据 /google 的广告条--> 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使用的.各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可.但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍然需要重新登录,这

  • Zend Framework实现多服务器共享SESSION数据的方法

    本文实例讲述了Zend Framework实现多服务器共享SESSION数据的方法.分享给大家供大家参考,具体如下: 一.问题起源 大型网站通常有多个服务器,并且使用多个二级域名.这样一台服务器产生的session就不能为所有服务器所共享.这样用户在一个地方登录就不能全部通行 二.PHP SESSION 的工作原理 在解决问题之前,先来了解一下 PHP SESSION 的工作原理.在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION

  • ASP.NET中访问DataGrid中所有控件值的方法

    本文实例讲述了ASP.NET中访问DataGrid中所有控件值的方法.分享给大家供大家参考,具体如下: <%@ Page Language="C#" %> <%@ import Namespace="System.Collections" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { if(!Page.IsPost

  • jsp和asp.net共享session值示例代码

    思路是ASP.NET中序列化Session以二进制数据保存到数据库,然后由JSP读取数据库中的二进制数据反序列化成Session对象,再强制转化成的Session对象,在JAVA端转换时,出现了错误,找遍网上的资料也没能解决,故采用一种替换的方式. 替换的方式的思路: 登录的ASPX文件中,在登录成功后将Session中的变量值保存到数据库中的一张表,关键字使用ASP.NET的Session对象的SessionID,然后建立一个ASPX文件,取得当前登录用户的SessionID,并使用的ASP.

  • Nginx中共享session会话配置方法例子

    Session一般都指时域.在计算机术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间. Session一般都指时域.在计算机术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间. 通常情况下能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的

  • php中http与https跨域共享session的解决方法

    遇到了HTTP.HTTPS协议下session共享解决cookie失效的问题,这里提供一个临时解决办法. 实现原理:把session id设置到本地的cookie. 如下: 复制代码 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 以下是实现代码,分为http与https两部分. 1,http部分: 复制代码 代码如下: <?php session_start();  $currentSessionI

  • 解析网站301重定向的实现方法,包括iis,apache,asp,php的方法

    页面永久性移走(301重定向)是一种非常重要的"自动转向"技术. 首先,给一个工具,是来检测服务器头信息的,简单来说就是看看你的站点的301是否成功了.不要小看这个301,如果被做成了302什么的,你的站可能就要让你欢喜让你忧了. 检测地址:http://www.seoconsultants.com/tools/headers.asp#results 301重定向可促进搜索引擎优化效果 从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法.当网站的域名发生变更后,搜索引擎

  • thinkPHP多域名情况下使用memcache方式共享session数据的实现方法

    本文实例讲述了thinkPHP多域名情况下使用memcache方式共享session数据的实现方法.分享给大家供大家参考,具体如下: 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使用的.各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可.但还存在一个问题,就是用户在这个服务器登录之

随机推荐