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

介绍

本篇内容主要讲解“ASP.NET中在不同子域中共享会话的具体方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET中在不同子域中共享会话的具体方法”吧!

代码如下:


保护无效employee(对象发送方,EventArgs e),,,,,,
{,,,,,,,,,,,
Response.Write (Session.SessionID.ToString ()),,,,,,
}

这样我们就得到了这样的值:0 julmoedn0kz3gyfnr1vksv0有点像是GUID,就算不是算法也都是类似的,主要就是为了保证全局唯一性。这样就达到了区分不同用户的会话的目的。接下来还有第二个问题,那就是SessionID有了,但是它又是怎么和相应的访问者(用户)绑定的呢?比如说用户一访问维护了自己的SessionID,用B户访问也维护了自己的SessionID。我们都知道网络是基于http无链接的,他们又是怎么做到的呢?没错,答案就是在客户端存储了自己的SessionID。浏览器存储SessionID有两种方式,一种就是利用饼干,还有一种就是利用url参数(这种我们不常用,很不友好)。

话题说到饼干上来了,怎么的?没想到会话和饼干还有这样的关系吧?(很多人知道,别废话我)没错,当我们请求一个url时候,服务器会生成一个全局的SessionID,并且把这个值以饼干的形式保存在客户端也就是浏览器(这里暂不讨论url方式)。这样当用户再去请求的时候,在http头把这个SessionID的饼干发到服务器端,服务器就去找这个SessionID,如果找到了。就证明这个用户的状态是存在的。

知道了这个原理,我们的问题也就有眉头了,即然是用饼干来保存SessionID,那么我们就可以在Cooikes上做手脚了。我们都知道Cooikes记录方式是以域(例如:https://www.jb51.net/)为区分的,这也是各种浏览器规定的。如果不这么做,安全性就会有问题。我们要做的就是让指定饼干的父域方式,不指定具体指域,这样饼干就可以跨子域了.Cookies可以像这样指定域:

代码如下:


保护无效employee(对象发送方,EventArgs e),,,,,,,
{,,,,,,,,,,,
Response.Cookies [“MyCook"]。域=?jb51.net",,,,
}

,这样,我们所有的二级域全部是认这一个主域的,比如a.jb51.net, b.jb51.net, user.jb51.net等等。有了这个认识,我想大家心里也有数了,该怎么怎么做,但是现在问题是用来生成SessionID的方法是ASP.NET自动实现的,我们又怎么去干涉它呢?这是这样做的,不主动干涉它,但是我可以操作它的饼干啊。接下来我们就研究ASP.NET存SessionID的Cooike的名字是什么。经过网上很容易就查找到了,名字是:ASP.NET_SessionId,这个就是SessionID饼干的名字。我们可以在Session_Start中这样写:

代码如下:


保护无效Session_Start(对象发送方,EventArgs e),,,,,,
{,,,,,,,,,,

Response.Cookies [“ASP.NET_SessionId"]。值=https://www.yisu.com/zixun/Session.SessionID.ToString ();

Response.Cookies [“ASP.NET_SessionId"]。域=?jb51.net",,,,,,

}

代码的意思是每次会话开始的时候,我都把ASP.NET_SessionId这个饼干重写成我们已有的SessionID,并且把这个Cookie域指的定为父域,比如:.jb51.net,这样就可以实现跨子域的会议共享了。怎么样很简单吧?

我们还有一个外题问题,就是客户端保存的问题解决了,但是服务器端会话的怎么办?一般情况下我们不同的子域做的是指向不同的服务器的,比如user.jb51.net专门一台服务器,yellow.jb51.net专门一台服务器。这时它们别说是进程了,连物理上都不是一个了.Session怎么共享?这时就用到另一个方法了,我们默认的会话是存储在asp.net进程中的,这样没法互相访问,如下面所示:

代码如下:


& lt; sessionState模式=癐nProc"/在

我们可以修改为状态服务器方式,这是一个单独的服务可以用来存储ASP。网络会话的,它支持分布式远程主机的,这样我们可以用一台服务器来提供会话服务,如下所示:

代码如下:


& lt; sessionState模式=癝tateServer"stateConnectionString=皌cpip=127.0.0.1:42424"timeout=?0”;/在

这样,就完全实现了不同子域的会议共享了。

前面说到Url保存SessionId的方式,由于不常用,给大家演示一下,如下配置就可以了:

代码如下:


& lt; sessionState模式=癝tateServer"stateConnectionString=皌cpip=127.0.0.1:42424"timeout=?0”;无cookie=皌rue"/在

无cookie属性指定是否用饼干来保存SessionId,我们运行一下得到下面的样子:

http://localhost: 3380/(S (dqxcs455n4u2vg55ia51fvqg))/违约。aspx

到此,相信大家对“ASP.NET中在不同子域中共享会话的具体方法”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

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