.NET二级域名共享Session

ASP.NET二级域名站点共享Session状态今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session。首先, Session要共享,站点之间SessionID必须要一致,那怎么保证SessionID一致呢?ASP.NET中的SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId用来维护浏览者Session对应关系的一个字符串,要想在二级域名站点之间,主站点和二级域名站点共享SessionID就必须先共享,那么我们就必须先实现ASP.NET_SessionId这一cookie的共享。A: CrossDomainCookieModule------------------------------------------------------------------------------------------------public class CrossDomainCookie : IHttpModule{private string m_RootDomain = string.Empty;#region IHttpModule Memberspublic void Dispose(){}public void Init(HttpApplication context){m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];context.EndRequest += new System.EventHandler(context_EndRequest);}void context_EndRequest(object sender, System.EventArgs e){HttpApplication app = sender as HttpApplication;for (int i = 0; i < app.Context.Response.Cookies.Count; i++){app.Context.Response.Cookies[i].Domain = m_RootDomain;}}#endregion}上面的Module重设了所有cookie的domain到root domain, root domain在web.config中设置。也许有人会说这是眉毛胡子一把抓重写了所有cookie的domain, 那他也可以判断一下cookie的name, 如果为ASP.NET_SessionId的话才重写。如果主站点和二级域名站点是同一站点,那么做到这一步,你的session就已经共享了,因为Session的ID是相同的,而且Session容器也是同一个。如果主站点和二级域名站点是两个不同站点,则需要进行更多的操作了。如果两个站点是不同的服务器的话,解决方法要简单点:1) 使用相同的state server来存储Session.2) 在两个站点的web.config设置相同的machineKey.<machineKeyvalidationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4"decryptionKey="5FC88DFC24EA123C"validation="SHA1"/>MachineKey的设置请参考http://msdn.microsoft.com/zh-cn/asp.net/w8h3skw9.aspx3) 给两个站点设置相同name这样做是为了确保两个站点的siteID相同,siteID是site name的hash值,注意请不要使用默认站点,因为默认站点的siteID并非site name的hash.如果两个站点是在同一的服务器的话,需要对CrossDomainCookie再作一下修改,此方法也可应用于两个站点在不同服务器的情况:1) 使用相同的state server来存储Session.2) 用反射来设置System.Web.SessionState.OutOfProcSessionStateStore的静态字段s_uribase的值public class CrossDomainCookie : IHttpModule{private string m_RootDomain = string.Empty;#region IHttpModule Memberspublic void Dispose(){}public void Init(HttpApplication context){m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);if (uriField == null)throw new ArgumentException("UriField was not found");uriField.SetValue(null, m_RootDomain);context.EndRequest += new System.EventHandler(context_EndRequest);}void context_EndRequest(object sender, System.EventArgs e){HttpApplication app = sender as HttpApplication;for (int i = 0; i < app.Context.Response.Cookies.Count; i++){app.Context.Response.Cookies[i].Domain = m_RootDomain;}}#endregion}完成这样的修改之后就可以实现Session的共享了。同样如果你是使用SQL server来存储Session, 也可以使用类似的方法来解决Session共享问题。来源:Diy综合信息网.NET二级域名共享Session

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈程序员创业

浅谈程序员创业——作者:邓学彬、Jiesoft1.什么是创业&#xff1f;   关于“创业”二字有必要重新学习一下&#xff0c;找了两个相对权威定义&#xff1a;创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合&#xff0c;从而创造出更大经济或社会价值的过程…

jmeter+Fiddler:通过Fiddler抓包生成jmeter脚本

Fiddler是目前最常用的抓包工具之一&#xff0c;它作为客户端和服务器端之间的代理&#xff0c;记录客户端和服务器之间的所有请求(http/https)&#xff0c;可以针对特定的请求过滤&#xff0c;分析请求和响应的数据、设置断点、调试、修改请求的数据&#xff0c;甚至可以修改服…

数据结构探险——树篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 树存在概念中&#xff0c;是对数组或者链表的一种操作方式的概念。 一、与树有关的一些基础概念 &#xff08;1&#xff09;树 有限节点的集合&#xff1b; &#xff08;2&#xff09;度 某个节点的…

grub rescue的修复方法

2019独角兽企业重金招聘Python工程师标准>>> 在win7下删除了ubuntu的swap交换空间的分区&#xff08;大约6G左右&#xff0c;根据自己的实际分区情况决定&#xff09;。重新启动电脑进入界面&#xff0c;直接显示&#xff1a; error:unknow filesystemgrub rescue&g…

jmeter强大的扩展插件!!

jmeter4.0以上版本&#xff0c;如jmeter5.1.1版本的集成插件&#xff0c;只需要在官网下下载“plugins-manager.jar”包&#xff0c;放在jmeter安装路径的lib/ext目录下即可使用。&#xff08;但该jar包包含的插件&#xff0c;还不能满足所需的功能&#xff0c;如服务器系统资源…

数据结构探险——图篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、图的相关概念 2、图的存储结构 第一种是用数组表达&#xff0c;第二三种用链表来表示有向图&#xff0c;最后一种链表来表示无向图。&#xff08;1&#xff09;邻接矩阵&#xff08;有向无向都可…

jmeter+WebDriver:启动浏览器进行web自动化

无论是web自动化还是手机app自动化&#xff0c;WebDriver是Selenium的核心模块&#xff0c;jmeter WebDriver 仅支持Firefox、Chrome 和 HTML Unit驱动&#xff0c;暂不支持IE 驱动。 一、下载JMeterPlugins-WebDriver插件并配置分享我的网盘下载地址&#xff1a;https://pan.b…

LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)

鄙人不才&#xff0c;故收录LeetCode中的解法和代码。 题目&#xff1a; 参考解法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { publi…

Linux基础(九)--定时任务

本文主要介绍了Linux中定时任务的相关知识。在日常中&#xff0c;有一些任务需要定时执行&#xff0c;例如&#xff1a;每天定时更新杀毒软件的数据库&#xff0c;每天定时执行数据清洗等脚本。这里就需要做定时任务。&#xff08;1&#xff09;概述在Linux中定时任务主要分为两…

【随感】tomorrow ,new semester ,finally i have time to read some books~

—————————youngLaker转载于:https://www.cnblogs.com/younglaker/archive/2012/12/30/2840129.html

LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)

题目&#xff1a; 参考解法&#xff1a; class Solution { public:string addStrings(string num1, string num2) {if (num1.size() < num2.size()) return addStrings(num2, num1);//这里并不是递归&#xff0c;只是为了使得第一个参数的长度是最大的int carry 0, i num1…

yum只下载软件不安装的两种方法

2019独角兽企业重金招聘Python工程师标准>>> 今天来说下在CentOS下下载软件&#xff0c;不安装的方法&#xff1a; 方法一&#xff1a;通过yum自带一个工具&#xff1a;yumdownloader [rootweb1 ~]# rpm -qa |grep yum-utils [rootweb1 ~]# yum -y install yum-ut…

[转载] New Concept English 1——Lesson 7 Are you a teacher?

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/12/31/2840653.html

appium+python自动化项目实战(一):引入nose和allure框架

本文将介绍一套比较完整的appium自动化框架&#xff0c;以python为编写脚本语言&#xff0c;是因为python有强大的库&#xff0c;同时易学易懂。 最终的测试框架代码&#xff0c;将在jenkins项目中一键构建&#xff0c;执行自动化测试用例&#xff0c;并输出展现形式丰富的测试…

Oracle监听器—静态注册

注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名&#xff0c;只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样&#xff0c;也有可能不一样。 注册分&#xff1a; 1. 静态注册 2. 动态注册 静态注册 为…

LeetCode445——Add Two Numbers II(两个链表数据相加(从链表尾部开始),返回新链表)

题目&#xff1a; 参考解法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l…

linux下制作codeblocks绿色版,并集成devhelp

Codeblocks更新到12.11了,可是软件中心还是10.01的.在codeblocks的官网找了一下发现了ubnutu的ppa, sudo apt-add-repository ppa:pasgui/ppa,可是不知道是否和以前的配置冲突,还是其它原因,编辑器居然没有多标签.于是想做一个绿色试试.到其wiki上以portable搜索 果然找到了方法…

appium+python自动化项目实战(二):项目工程结构

废话不多说&#xff0c;直接上图&#xff1a; nose.cfg配置文件里&#xff0c;可以指定执行的测试用例、生成测试报告等。以后将详细介绍。 转载于:https://www.cnblogs.com/luihengk/p/11414208.html

大数据批量插入小练习_SqlServer

这几天把sqlserver批量插入也整理了一下&#xff0c;性能方面有很大的提高&#xff0c;下面直接上代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.Threading;using Syste…

LeetCode371——Sum of Two Integers(不用+)

class Solution { public:int getSum(int a, int b) {int sum a;while (b ! 0){sum a ^ b;//calculate sum of a and b without thinking the carry b (a & b) << 1;//calculate the carrya sum;//add sum(without carry) and carry}return sum;} };