最近遇到了一个问题,我做的asp.net mvc应用程序要作为一个子应用程序部署到几个站点中,需要在本应用程序中获取站点的session值。

已经使用了session state server,并设置了machine key,但还是不行。

这个问题折腾了整整一天的时间。网上有很多人遇到了这个问题,也有很多解决方案,但大都不能用。最后在某个英文站点中找到了解决的方法。

现将解决方法整理之后贴出来。

1.建立一个HttpModule

 /// <summary>
/// 这个模块需要放到整个管道的前端
/// </summary>
public class SessionShareModule : IHttpModule
{ void IHttpModule.Init(HttpApplication context)
{
Type storeProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore"); FieldInfo uriField = storeProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic); if (uriField == null)
{
throw new ArgumentException("UriField was not found");
} uriField.SetValue(null, "xxx.cn"); context.EndRequest += new EventHandler(this.EndRequest);
} /// <summary>
/// 在请求结束之后,将所有的cookie的域都改写为 xxx.cn
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void EndRequest(object sender, EventArgs args)
{
HttpApplication application = sender as HttpApplication; for (int i = ; i < application.Response.Cookies.Count; i++)
{
application.Response.Cookies[i].Domain = "xxx.cn";
}
} void IHttpModule.Dispose()
{ }
}

模块部署

(1)将这个模块的dll文件复制到站点和子应用程序的bin目录下

(2)在站点的web.config的  <system.webServer> <modules>节下添加配置:

<add name="SessionShare" type="XXX.SessionShare.SessionShareModule, XXX.SessionShare" />

子应用程序的web.config配置项可加可不加。不加的话,它会继承站点的配置项。加的话,它会覆盖站点的配置项。建议不用加。

asp.net 子应用程序/虚拟目录 session共享的更多相关文章

  1. asp.net 获得域名,端口,虚拟目录[转]

    asp.net 获得域名,端口,虚拟目录 记性不好,好多次都被路径问题给拦住了.我现在想得到一个资源的全URL路径,因此首先想得到网站当前的域名,端口和虚拟目录.看下表 底下這張表就是各種跟 Brow ...

  2. Asp.Net Core 中的“虚拟目录”

    写在前面 现在部署Asp.Net Core应用已经不再限制于Windows的IIS上,更多的是Docker容器.各种反向代理来部署.也有少部分用IIS部署的,IIS部署确实是又快又简单,图形化操作三下 ...

  3. 在asp.net一般应用程序中使用session

    通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但在类中就会遇到一些问题.也知道通过下面的方法得到 ...

  4. Asp.Net StateServer实现共同域名下Session共享

    概述 在实验的时候,参照了多方的信息,确实成功了,这里简单记录一下. 我们知道,在Asp.Net的Web.Config文件中,System.Web节点下,有个sessionState节点,它说明了应用 ...

  5. ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)

    [原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...

  6. WEB服务器4--IIS中网站、Web应用程序和虚拟目录

    网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示. ...

  7. 配置ASP.NET Web应用程序, 使之运行在medium trust

    这文章会向你展示, 怎么配置ASP.NET Web应用程序, 使之运行在medium trust.   如果你的服务器有多个应用程序, 你可以使用code access security和medium ...

  8. .net 获取CPU频率 内存 磁盘大小,域名 端口 虚拟目录等

    CPU个数: @Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS") CPU类型: @Environment.Get ...

  9. IIS的虚拟目录和子应用程序

    一.虚拟目录     虚拟目录是指在发布的网站下建立一个虚拟子目录,指定一个固定的物理路径做为站点的应用路径.     1. 虚拟目录与父级站点共用一个应用程序池,网站Test是在D盘下建立了的虚拟目 ...

随机推荐

  1. windows无法停止 服务 错误1053 服务没有及时响应

    windows无法停止 服务 错误1053 服务没有及时响应 服务程序.exe -st

  2. freemarker【FTL】常见语法大全

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断如果 ...

  3. clean

    启动tomcat 报 Could not delete D:/online/.metadata/.plugins/org.eclipse.wst.server.core/tm  

  4. IOS初级:UIwindow

    AppDelegate.h @property (strong, nonatomic) UIWindow *window; AppDelegate.m - (BOOL)application:(UIA ...

  5. 在Eclipse中运行JAVA代码远程操作HBase的示例

    在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...

  6. Hibernate validator的一些额外特性

    分组验证及分组顺序 如果我们想在新增的情况验证id和name,而修改的情况验证name和password,怎么办? 那么就需要分组了. 首先定义分组接口://分组接口就是两个普通的接口,用于标识,类似 ...

  7. Windows 8.1 app 界面设计

    大纲: Windows 应用商店应用 UI 详细信息 http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/dn263191.aspx 快 ...

  8. Google Reader 快关了!!

    现在还每天用Google Reader, 每次打开都提示7月1号要关闭... 上图怀念: 控制区功能:排序.展开\收缩显示.上一条\下一条,还有下拉框下的很多功能... 列表显示 针对每个Item下的 ...

  9. clion中资源文件以及头文件的引用

    首先在使用clion中没有将文件target就会出现下面的错误  在使用的时候可以默认一下  在以后的使用中如果不需要某个文件时  就可以在CMakeLis.txt文件把它删除掉 在代码界面的最上面出 ...

  10. 将爬取的网页数据保存到数据库时报错不能提交JPA,Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xB6 \xE2...' for column 'content' at row 1

    错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范).正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实 ...