最近项目遇到要共享cookie的问题,本来后台保存session用的是redis来保存数据的。所以只需要2个站点发的ASP.NET_SessionId是相同的就可以,并且它的Domain 是父级域名。实现code:
protected void Session_Start(object sender, EventArgs e)
{
Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID.ToString();
Response.Cookies["ASP.NET_SessionId"].Domain = ".aa.com";
}
网上有类似参考地址:Asp.Net集群中Session共享
很多时候项目的cookie name 都是需要替换默认的ASP.NET_SessionId(需要读取配置),同时我们在开发的时候也不知道具体的父级域名(需要用正则表达式),所以具体实现code如下:
protected void Session_Start(object sender, EventArgs e)
{
SessionStateSection config = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
string cookieName = config.CookieName;
Response.Cookies[cookieName].Value = Session.SessionID.ToString();
string url = Request.Url.ToString();
Regex reg = new Regex("([^.]*).([^.]*).com");
Match m = reg.Match(url);
if (m.Groups.Count > 2)
{
Response.Cookies[cookieName].Domain = $".{m.Groups[2].Value}.com";
}
}