如何在c#mvc中跨多个子域保持会话?

如何在c#mvc中跨多个子域保持会话?,c#,asp.net-mvc,asp.net-mvc-3,session,C#,Asp.net Mvc,Asp.net Mvc 3,Session,我正在使用的一个购物车应用程序从普通页面跳转到提交您的详细信息页面 长话短说,部署的应用程序有两个副本:一个服务器用于“主”站点,另一个服务器具有运行在https上的ev证书,用于获取客户详细信息(包括付款;这是PCI合规性问题) 我的问题是: 从->跳转时(如果用户向后浏览,则返回),如何保留会话 使用JSONP跨域传递cookies很简单,但我不知道如何在远程端使用它们来“重新连接”会话 我已经阅读了关于滚动您自己的自定义会话提供程序等的各种内容,但我还没有找到一个不仅仅是一般性建议的内容;

我正在使用的一个购物车应用程序从普通页面跳转到提交您的详细信息页面

长话短说,部署的应用程序有两个副本:一个服务器用于“主”站点,另一个服务器具有运行在https上的ev证书,用于获取客户详细信息(包括付款;这是PCI合规性问题)

我的问题是:

从->跳转时(如果用户向后浏览,则返回),如何保留会话

使用JSONP跨域传递cookies很简单,但我不知道如何在远程端使用它们来“重新连接”会话

我已经阅读了关于滚动您自己的自定义会话提供程序等的各种内容,但我还没有找到一个不仅仅是一般性建议的内容;当然,没有关于如何使用它重新加入会话的示例


这是一个MVC3 c#web应用程序的问题。

会话的问题是它们被保存在同一个域中

如果您在子域中有这两个应用程序,则始终可以将其附加到
web.config


这样就可以了,但如果域完全不同,最好的方法就是推出自己的会话提供程序或使用现有的会话提供程序,如SQL

您可以使用任何缓存系统,而不是将变量附加到会话变量中,您可以将它们作为键/值对添加到缓存中,您可以始终使用NoSQL替代方案(有很多这样的替代方案,以便您可以原型化并进行概念验证,以便推出最终位)

Memcached服务器始终是一个很好的替代方案,并且是免费的

这里的诀窍是这样做:

Cache.AddObject(key+“UserInfo name”、“Bruno-Alexandre”);
其中,
key
可以是在
session\u start

而不是这个

Session["UserInfo-name"] = "Bruno Alexandre";

创建cookie时,必须编写

Response.AppendCookie("Your cookie name");
要知道代码是这样的

if (Request.Cookies["Your cookie name"] != null)
{
    string value = Request.Cookies["Your cookie name"].Value;
}
如果有不同的解决方案,那么找到

机关枪 它们必须是相同的。你把它弄下来

web.config文件中的system.web

然后在machineKey之后写

 <httpCookies domain=".yourdomainname.com" />

我正在使用函数中的HttpContext创建用户会话

HttpContext cu;
string username = cu.User.Identity.Name;
username = Guid.NewGuid().ToString();
cu.Session["username"] = username;
HttpCookie hc = new HttpCookie("username", username);
hc.Domain = ".yourdomain.com";
hc.Expires = DateTime.Now.AddDays(1d);
cu.Response.Cookies.Add(hc);
有了这段代码,我可以在3个子域内共享会话

但是,您将面临的问题是,您必须对同一应用程序进行不同的部署,因此您需要进行大量的工作。您很可能需要将它们都指向同一个会话数据库,并在其间执行一些黑魔法。