购物车应用程序我正在从正常页面进入提交您的详细信息页面时跳转域。
长话短说,部署的应用程序有两个副本:一个服务器用于“主”站点,另一个服务器具有运行在https上的ev证书,用于客户详细信息(包括付款;这是PCI合规性问题)。 / p>
我的问题是:
从http://shop.domain跳转时 - > https://secure.domain(如果用户浏览回来),我该如何保留会话?
使用JSONP传递cookie跨越域很简单,但我不知道如何处理远程端的“重新连接”会话。
我已经阅读了有关滚动您自己的自定义会话提供程序等的各种事情,但我还没有找到一个不仅仅是通用建议;当然没有关于如何使用它来重新加入会话的例子。
这是一个MVC3 c#网络应用程序。
答案 0 :(得分:8)
Session
的问题在于它们保存在同一个域中。
如果您在子域中有2个应用程序,则可以随时将其附加到web.config
<httpCookies domain=".domain.com"/>
并且这将起到作用,但如果域完全不同,最好的方法是推出自己的会话提供程序或使用现有的提供程序,如SQL。
您可以使用此任何缓存系统,而不是将变量附加到会话变量中,而是将它们作为键/值对附加到缓存中,您始终可以使用NoSQL替代(很多free accounts那里你可以进行原型设计并进行概念验证,以便推出最后的部分。)
Memcached服务器始终是一个不错的选择,而Couchbase可以免费提供community version。
这里的诀窍是:
Cache.AddObject(key + "UserInfo-name", "Bruno Alexandre");
其中key
可以是global.asax
上session_start
附加的查询字符串值
而不是
Session["UserInfo-name"] = "Bruno Alexandre";
答案 1 :(得分:0)
当您创建cookie时,您必须编写
Response.AppendCookie("Your cookie name");
要获得代码类似
if (Request.Cookies["Your cookie name"] != null)
{
string value = Request.Cookies["Your cookie name"].Value;
}
如果有不同的解决方案,那么找
的machineKey 这需要相同。你明白了
web.config文件中的system.web
然后在machineKey之后写
<httpCookies domain=".yourdomainname.com" />
答案 2 :(得分:0)
我正在使用函数中的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个子域内共享会话。