SqlServer Session共享注意点 Session如何保存在sql数据库中

公司下派任务,之前的网站是一台服务器,由于用户过多,负载过大,现在老大要求多加一台服务器。加就加贝,应该跟我这DEV没有

关系吧,应该不会碰到Source的吧。但是,之前网站有一些数据是放在Session里面的。大家应该理解Sessino的机制(自己的理解):当用户访问服务器的时候,会在Cookie里面留下一个SessionId,HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value就能取到,然后服务器会根据这个SessionId 来跟我服务器这边进行数据匹配,简单说就是拿你的SessionId来取存放在我服务器端的数据,类似于Key:Word。由于当一个客户端访问一个服务器,存放在Session的数据是在服务器端的,若是我加一台服务器的话,这Session的数据就要共享出来,能够让我两台机器同时访问到。这样,用户访问服务器的时候,我切换服务器机器就不会丢失Sesson里面的数据了。

  我遇到的问题:

  在网上搜了关于Session 共享的方法,http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html  有很多,我就选择一个SqlServer共享Sessin的方法。

  首先,你得建立这个Sqlserver数据库。cmd命令。C:WindowsMicrosoft.NETFrameworkv2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c

  命令不懂的看我文中的链接。很简单。

  然后,在Asp.net 项目中的Web.config里面<system.web>输入

<machineKeyvalidationKey="1234567890123456789012345678901234567890AAAAAAAAAA"decryptionKey="123456789012345678901234567890123456789012345678"validation="SHA1"decryption="Auto"/>
<sessionStatemode="SQLServer"sqlConnectionString="server=jpmsnmdb05t; database=AWBUISession;Trusted_Connection=Yes; Persist Security Info=False;"allowCustomSqlDatabase="true"cookieless="false"timeout="100"/>

  到了这一步你在代码里面设置Session["name"]="value"的话,他就会将你的信息保存在SqlServer你建立的数据库中Session表中。

读取的话,我是这样设置的,从客户端获得SessionId,然后根据这个SessionId到表里面查询,查到的数据反编译出来就可以了,不懂得可以看看我的附件,我写了一个用户登录测试系统。

  当中我遇到了一个问题,就是我不会建立测试环境。光有两台机器。你要记住,SessionId是cookie信息,那么不同的domain(就是URL)他的SessionId是不同的,所以你要建立多个服务器共享一个session的话,一定要建立一个相同的domain。这样你就可以随心所欲访问那一台服务器了,举个例子:比如用户登录时访问了第一台服务器,登录好后,服务器切换到第二台服务器了,用户当然不知道,用户还在继续访问页面,系统肯定要检测一下是不是用户登录了,不然得让用户登录去,好,你得看看Session里面的信息吧,根据SessionId得到信息?若是domain不同,你的SessionId不同,现在你的SessionId已经不是之前的那个了,你肯定在怀恋你登录第一台服务器的SessionId。若是你设置同一个domain的话,好,你无论访问多少台机器,你的SessionId是一个,那么取出用户信息还不是小case。好,如何建立一个相同的domian:

  设置本地的host,本地host路径在哪?我问同事的,我也不是很清楚了,C:WindowsSystem32driversetc

  很简单,你知道你的服务器IP地址吧。那么只要修改你的host文件,看 

    172.23.126.137      SessionTest          # source server
      10.168.109.120      SessionTest         # x client host

  这是我添加的,两台服务器,同一个domain:SessionTest        

    由于我把系统发布到服务器IIS的时候设置的端口号是8078,所以我只要在本地访问http://sessiontest:8078/就好了。

    手动的开/关IIS里面的站点进行切换服务器。

   这样测试的环境也弄好啦。

    有个没有解决的问题,若是有读者涉及到也可以交流一下,在本地运行我的VS,访问页面,没有任何的问题,

若是把系统放到服务器上面,我发现,当我取Session信息的时候,存放Session数据库表中满足我页面搜索条件的只有一条,但是它却出现了两条,这两条SessionId,前一大半是一样的,跟HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value 是一样的。HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value这个值,居然跟我ASPStateTempSessions表里面的SessionId不一样。我的HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value只是ASPStateTempSessions表里面的SessionId的一半。看下图,

HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value :x0if3uuddqmpl4451jberf2h

ASPStateTempSessions表里面的SessionId:x0if3uuddqmpl4451jberf2h077b2520

 

   aspnet中,session默认以inproc模式存储,也就是保存在iis进程中,这样有个优点就是效率高,但不利于为本负载均衡扩展。可以把session信息保存在SQL Server中,据说,该种方式比起inproc性能损失为10%-20%。如何实现呢,主要分两步介绍:

  一.这个方法网站找的 具体我也没实现

      1、初始化SQL Server中的状态数据库

            ASP.NET SQL Server 提供注册工具Aspnet_regsql.exe,用于创建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库。Aspnet_regsql.exe位于  /%windir%/Microsoft.NET/Framework/<versionNumber>/aspnet_regsql.exe 目录下。如果麻烦,可以 直接用visual studio tools 的命令提示工具中直接输入aspnet_regsql.exe使用。用法如下:

 

    Aspnet_regsql.exe <options>

    可以用如下的语法来添加默认session数据库ASPState

    aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype p

    -S,-U/-P

     必须是大写,分别表示数据库服务器,用户名和密码。

    -ssadd / –ssremove 参数:

     -ssadd表示是添加Session数据库, -ssremove表示移除Session数据库.

    sstype 参数:    

  选项

说明

t

将会话数据存储到 SQL Server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。

p

将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。

c

将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。

     创建自定义数据库myAppState,可以用如下的语法:

     aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype c -d myAppState

2、配置webconfig

    在webconfig的  <system.web>节下添加如下配置:

     <sessionState mode="SQLServer"  sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>

   如果在初始化数据库的时候,创建了自定义数据库可以用类似于如下的的配置:

<sessionState mode="SQLServer"  allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>

    通过以上两步的设置,已经可以了。详细情况请参阅msdn。

二 .这个方法解决了我的问题 

打开VS2005命令提示,输入:aspnet_regsql.exe -?

出现了aspnet_regsql.exe的说明,往下拉会看到"会话状态选项",有一命令:-ssadd(Session state add?) 解释说:添加对 sqlserver 模式会话状态的支持.

估计就是这个了,输入: aspnet_regsql.exe -ssadd

提示:请指定用户ID,或对受信任的连接使用-E

输入如下:aspnet_regsql.exe -ssadd -E

成功.

也可以指定用户名:aspnet_regsql.exe -ssadd -S 数据库实例名(可指定远程服务器) -U 登录名 -P 密码 

会提示输入密码.正确输入后也会执行成功.

删除该功能的话执行aspnet_regsql.exe -ssremove -E

就OK了.

然后就是在你项目config下<system.web>节点下修改sessionState 配置为<sessionState mode="StateServer" sqlConnectionString="data source=.;userid=sa;password=svse;Trusted_Connection=yes" timeout="720"/>

Asp.net 多服务器 Session共享

需求:

  公司下派任务,之前的网站是一台服务器,由于用户过多,负载过大,现在老大要求多加一台服务器。加就加贝,应该跟我这DEV没有

关系吧,应该不会碰到Source的吧。但是,之前网站有一些数据是放在Session里面的。大家应该理解Sessino的机制(自己的理解):当用户访问服务器的时候,会在Cookie里面留下一个SessionId,HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value就能取到,然后服务器会根据这个SessionId 来跟我服务器这边进行数据匹配,简单说就是拿你的SessionId来取存放在我服务器端的数据,类似于Key:Word。由于当一个客户端访问一个服务器,存放在Session的数据是在服务器端的,若是我加一台服务器的话,这Session的数据就要共享出来,能够让我两台机器同时访问到。这样,用户访问服务器的时候,我切换服务器机器就不会丢失Sesson里面的数据了。

  步骤

  在网上搜了关于Session 共享的方法,http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html  有很多,我就选择一个SqlServer共享Sessin的方法。

    1。

  首先,你得建立这个Sqlserver数据库。cmd命令。C:WindowsMicrosoft.NETFrameworkv2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c

    命令不懂的看我文中的链接。很简单。

    或者 运行C:WindowsMicrosoft.NETFrameworkv2.0.50727 里面的 InstallPersistSqlState.sql(建立数据库) UninstallPersistSqlState.sql(卸载)

      2。

  然后,在Asp.net 项目中的Web.config里面<system.web>输入

  标签里面不懂也看链接

<machineKeyvalidationKey="1234567890123456789012345678901234567890AAAAAAAAAA"decryptionKey="123456789012345678901234567890123456789012345678"validation="SHA1"decryption="Auto"/>
<sessionStatemode="SQLServer"sqlConnectionString="server=jpmsnmdb05t; database=AWBUISession;Trusted_Connection=Yes; Persist Security Info=False;"allowCustomSqlDatabase="true"cookieless="false"timeout="100"/>

   然后,在程序里面进行Sesssion["test"]="test value" 或则取Session的内容看看,ok,都会将Session的数据放到我建立的数据库里面。

  注意

  若是按照我上面的配置还没有成功的朋友,我只能说,你肯定犯错了,请见下面对照一下:

  1.  写入Session的值一定要是可序列化的(我就碰到这个问题,把我搞死了,刚开始都不懂,看网上就说一句注意可序列化我也没有注意,真正自己配置不成功的时候就哭吧)我来举个例子,比如你新建了一个类User,当你Sesssion["User"]=new User("name","pwd");  你要记住User类一定要序列化,不然你就永远不会成功,如何序列化,很简单在public class User上面添加一句话[Serializable()].记住所有的都要序列化,只要你向Session里面设值了,因为系统会把你写入Session 里面的值进行序列化后存放到ASPStateTempSessions表里面的。

    2.  我自己配的测试环境,在http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html 我还问了别人如何配置,当时我也不清楚我创建的测试环境是不是正确的。

    我的配置环境(下面是我问别人的话) :   

    不知道楼主能不能看到,实在是没办法了,都纠结好久了。
    我按照你的方式进行配置,我目的是想多台服务器共享session,利用Sql server。 我不知道我的测试方法对不对,我设置本地    host为 172.23.126.137 SessionTest # source server
          10.168.109.120 SessionTest # x client host
我将我的代码放到这两台服务器上面,然后我停掉一台服务器IIS,然后访问 http://sessiontest:8078/ 比如用户登录功能,它会在SqlServer上面添加一条记录。 然后我打开这台,停掉另外一台,访问Url,它还是用户登录页面,按道理应该是检测用户信息成功,不会再次进行用户登录的。 两台服务器IIS都是,8078端口,只是IP不同。 希望楼主能看到,希望.......
 
            虽然楼主回答了我的问题,然而还是没有看懂,但是还是非常感谢那位朋友,过了两三天,我自己还是发现问题的原因:
    
    我要提到一个问题,ASPStateTempSessions表里面的SessionId其实是SessionId+AppId(占8位).   AppId是ASPStateTempSessions表里面AppId的十六进制表示。我在网上看了好多资料,ASPStateTempSessions表里面的AppId到底是什么东西。无意中,我的测试人员提醒了我一下,我截个图 ,如下,看到26没有 。
    我的ASPStateTempSessions表如下。
 
    AppId                 APPName
   -1977566844        /lm/w3svc/26/root
    

SqlServer Session共享注意点
Session如何保存在sql数据库中

 
               只要你在多个服务器里面把ID设为一样的就可以了。若是有不懂得可以问我,我最近在搞这个东西。

   aspnet中,session默认以inproc模式存储,也就是保存在iis进程中,这样有个优点就是效率高,但不利于为本负载均衡扩展。可以把session信息保存在SQL Server中,据说,该种方式比起inproc性能损失为10%-20%。如何实现呢,主要分两步介绍:

  一.这个方法网站找的 具体我也没实现

      1、初始化SQL Server中的状态数据库

            ASP.NET SQL Server 提供注册工具Aspnet_regsql.exe,用于创建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库。Aspnet_regsql.exe位于  /%windir%/Microsoft.NET/Framework/<versionNumber>/aspnet_regsql.exe 目录下。如果麻烦,可以 直接用visual studio tools 的命令提示工具中直接输入aspnet_regsql.exe使用。用法如下:

 

    Aspnet_regsql.exe <options>

    可以用如下的语法来添加默认session数据库ASPState

    aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype p

    -S,-U/-P

     必须是大写,分别表示数据库服务器,用户名和密码。

    -ssadd / –ssremove 参数:

     -ssadd表示是添加Session数据库, -ssremove表示移除Session数据库.

    sstype 参数:    

  选项

说明

t

将会话数据存储到 SQL Server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。

p

将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。

c

将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。

     创建自定义数据库myAppState,可以用如下的语法:

     aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype c -d myAppState

2、配置webconfig

    在webconfig的  <system.web>节下添加如下配置:

     <sessionState mode="SQLServer"  sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>

   如果在初始化数据库的时候,创建了自定义数据库可以用类似于如下的的配置:

<sessionState mode="SQLServer"  allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>

    通过以上两步的设置,已经可以了。详细情况请参阅msdn。

二 .这个方法解决了我的问题 

打开VS2005命令提示,输入:aspnet_regsql.exe -?

出现了aspnet_regsql.exe的说明,往下拉会看到"会话状态选项",有一命令:-ssadd(Session state add?) 解释说:添加对 sqlserver 模式会话状态的支持.

估计就是这个了,输入: aspnet_regsql.exe -ssadd

提示:请指定用户ID,或对受信任的连接使用-E

输入如下:aspnet_regsql.exe -ssadd -E

成功.

也可以指定用户名:aspnet_regsql.exe -ssadd -S 数据库实例名(可指定远程服务器) -U 登录名 -P 密码 

会提示输入密码.正确输入后也会执行成功.

删除该功能的话执行aspnet_regsql.exe -ssremove -E

就OK了.

然后就是在你项目config下<system.web>节点下修改sessionState 配置为<sessionState mode="StateServer" sqlConnectionString="data source=.;userid=sa;password=svse;Trusted_Connection=yes" timeout="720"/>

Asp.net 多服务器 Session共享

需求:

  公司下派任务,之前的网站是一台服务器,由于用户过多,负载过大,现在老大要求多加一台服务器。加就加贝,应该跟我这DEV没有

关系吧,应该不会碰到Source的吧。但是,之前网站有一些数据是放在Session里面的。大家应该理解Sessino的机制(自己的理解):当用户访问服务器的时候,会在Cookie里面留下一个SessionId,HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value就能取到,然后服务器会根据这个SessionId 来跟我服务器这边进行数据匹配,简单说就是拿你的SessionId来取存放在我服务器端的数据,类似于Key:Word。由于当一个客户端访问一个服务器,存放在Session的数据是在服务器端的,若是我加一台服务器的话,这Session的数据就要共享出来,能够让我两台机器同时访问到。这样,用户访问服务器的时候,我切换服务器机器就不会丢失Sesson里面的数据了。

  步骤

  在网上搜了关于Session 共享的方法,http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html  有很多,我就选择一个SqlServer共享Sessin的方法。

    1。

  首先,你得建立这个Sqlserver数据库。cmd命令。C:WindowsMicrosoft.NETFrameworkv2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c

    命令不懂的看我文中的链接。很简单。

    或者 运行C:WindowsMicrosoft.NETFrameworkv2.0.50727 里面的 InstallPersistSqlState.sql(建立数据库) UninstallPersistSqlState.sql(卸载)

      2。

  然后,在Asp.net 项目中的Web.config里面<system.web>输入

  标签里面不懂也看链接

<machineKeyvalidationKey="1234567890123456789012345678901234567890AAAAAAAAAA"decryptionKey="123456789012345678901234567890123456789012345678"validation="SHA1"decryption="Auto"/>
<sessionStatemode="SQLServer"sqlConnectionString="server=jpmsnmdb05t; database=AWBUISession;Trusted_Connection=Yes; Persist Security Info=False;"allowCustomSqlDatabase="true"cookieless="false"timeout="100"/>

   然后,在程序里面进行Sesssion["test"]="test value" 或则取Session的内容看看,ok,都会将Session的数据放到我建立的数据库里面。

  注意

  若是按照我上面的配置还没有成功的朋友,我只能说,你肯定犯错了,请见下面对照一下:

  1.  写入Session的值一定要是可序列化的(我就碰到这个问题,把我搞死了,刚开始都不懂,看网上就说一句注意可序列化我也没有注意,真正自己配置不成功的时候就哭吧)我来举个例子,比如你新建了一个类User,当你Sesssion["User"]=new User("name","pwd");  你要记住User类一定要序列化,不然你就永远不会成功,如何序列化,很简单在public class User上面添加一句话[Serializable()].记住所有的都要序列化,只要你向Session里面设值了,因为系统会把你写入Session 里面的值进行序列化后存放到ASPStateTempSessions表里面的。

    2.  我自己配的测试环境,在http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html 我还问了别人如何配置,当时我也不清楚我创建的测试环境是不是正确的。

    我的配置环境(下面是我问别人的话) :   

    不知道楼主能不能看到,实在是没办法了,都纠结好久了。
    我按照你的方式进行配置,我目的是想多台服务器共享session,利用Sql server。 我不知道我的测试方法对不对,我设置本地    host为 172.23.126.137 SessionTest # source server
          10.168.109.120 SessionTest # x client host
我将我的代码放到这两台服务器上面,然后我停掉一台服务器IIS,然后访问 http://sessiontest:8078/ 比如用户登录功能,它会在SqlServer上面添加一条记录。 然后我打开这台,停掉另外一台,访问Url,它还是用户登录页面,按道理应该是检测用户信息成功,不会再次进行用户登录的。 两台服务器IIS都是,8078端口,只是IP不同。 希望楼主能看到,希望.......
 
            虽然楼主回答了我的问题,然而还是没有看懂,但是还是非常感谢那位朋友,过了两三天,我自己还是发现问题的原因:
    
    我要提到一个问题,ASPStateTempSessions表里面的SessionId其实是SessionId+AppId(占8位).   AppId是ASPStateTempSessions表里面AppId的十六进制表示。我在网上看了好多资料,ASPStateTempSessions表里面的AppId到底是什么东西。无意中,我的测试人员提醒了我一下,我截个图 ,如下,看到26没有 。
    我的ASPStateTempSessions表如下。
 
    AppId                 APPName
   -1977566844        /lm/w3svc/26/root
    

SqlServer Session共享注意点
Session如何保存在sql数据库中

 
               只要你在多个服务器里面把ID设为一样的就可以了。若是有不懂得可以问我,我最近在搞这个东西。

需求:

  公司下派任务,之前的网站是一台服务器,由于用户过多,负载过大,现在老大要求多加一台服务器。加就加贝,应该跟我这DEV没有

关系吧,应该不会碰到Source的吧。但是,之前网站有一些数据是放在Session里面的。大家应该理解Sessino的机制(自己的理解):当用户访问服务器的时候,会在Cookie里面留下一个SessionId,HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value就能取到,然后服务器会根据这个SessionId 来跟我服务器这边进行数据匹配,简单说就是拿你的SessionId来取存放在我服务器端的数据,类似于Key:Word。由于当一个客户端访问一个服务器,存放在Session的数据是在服务器端的,若是我加一台服务器的话,这Session的数据就要共享出来,能够让我两台机器同时访问到。这样,用户访问服务器的时候,我切换服务器机器就不会丢失Sesson里面的数据了。

  步骤

  在网上搜了关于Session 共享的方法,http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html  有很多,我就选择一个SqlServer共享Sessin的方法。

    1。

  首先,你得建立这个Sqlserver数据库。cmd命令。C:WindowsMicrosoft.NETFrameworkv2.0.50727>aspnet_regsql.exe -S jpmsnmdb05t - E -d AWBUISession -ssadd -sstype c

    命令不懂的看我文中的链接。很简单。

    或者 运行C:WindowsMicrosoft.NETFrameworkv2.0.50727 里面的 InstallPersistSqlState.sql(建立数据库) UninstallPersistSqlState.sql(卸载)

      2。

  然后,在Asp.net 项目中的Web.config里面<system.web>输入

  标签里面不懂也看链接

<machineKeyvalidationKey="1234567890123456789012345678901234567890AAAAAAAAAA"decryptionKey="123456789012345678901234567890123456789012345678"validation="SHA1"decryption="Auto"/>
<sessionStatemode="SQLServer"sqlConnectionString="server=jpmsnmdb05t; database=AWBUISession;Trusted_Connection=Yes; Persist Security Info=False;"allowCustomSqlDatabase="true"cookieless="false"timeout="100"/>

   然后,在程序里面进行Sesssion["test"]="test value" 或则取Session的内容看看,ok,都会将Session的数据放到我建立的数据库里面。

  注意

  若是按照我上面的配置还没有成功的朋友,我只能说,你肯定犯错了,请见下面对照一下:

  1.  写入Session的值一定要是可序列化的(我就碰到这个问题,把我搞死了,刚开始都不懂,看网上就说一句注意可序列化我也没有注意,真正自己配置不成功的时候就哭吧)我来举个例子,比如你新建了一个类User,当你Sesssion["User"]=new User("name","pwd");  你要记住User类一定要序列化,不然你就永远不会成功,如何序列化,很简单在public class User上面添加一句话[Serializable()].记住所有的都要序列化,只要你向Session里面设值了,因为系统会把你写入Session 里面的值进行序列化后存放到ASPStateTempSessions表里面的。

    2.  我自己配的测试环境,在http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html 我还问了别人如何配置,当时我也不清楚我创建的测试环境是不是正确的。

    我的配置环境(下面是我问别人的话) :   

    不知道楼主能不能看到,实在是没办法了,都纠结好久了。
    我按照你的方式进行配置,我目的是想多台服务器共享session,利用Sql server。 我不知道我的测试方法对不对,我设置本地    host为 172.23.126.137 SessionTest # source server
          10.168.109.120 SessionTest # x client host
我将我的代码放到这两台服务器上面,然后我停掉一台服务器IIS,然后访问 http://sessiontest:8078/ 比如用户登录功能,它会在SqlServer上面添加一条记录。 然后我打开这台,停掉另外一台,访问Url,它还是用户登录页面,按道理应该是检测用户信息成功,不会再次进行用户登录的。 两台服务器IIS都是,8078端口,只是IP不同。 希望楼主能看到,希望.......
 
            虽然楼主回答了我的问题,然而还是没有看懂,但是还是非常感谢那位朋友,过了两三天,我自己还是发现问题的原因:
    
    我要提到一个问题,ASPStateTempSessions表里面的SessionId其实是SessionId+AppId(占8位).   AppId是ASPStateTempSessions表里面AppId的十六进制表示。我在网上看了好多资料,ASPStateTempSessions表里面的AppId到底是什么东西。无意中,我的测试人员提醒了我一下,我截个图 ,如下,看到26没有 。
    我的ASPStateTempSessions表如下。
 
    AppId                 APPName
   -1977566844        /lm/w3svc/26/root
    

SqlServer Session共享注意点
Session如何保存在sql数据库中

 
               只要你在多个服务器里面把ID设为一样的就可以了。若是有不懂得可以问我,我最近在搞这个东西。