using System.Web;
using System;
using System.Configuration;
using System.Diagnostics;
using System.Reflection;
using System.Web.SessionState;
namespace Ks5uCMS.Web.UI
{
public class CrossDomainCookie : IHttpModule
{
private string m_RootDomain = string.Empty;
#region IHttpModule Members
public 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;
string cookieName = System.Web.Security.FormsAuthentication.FormsCookieName;
HttpCookie cookie = app.Context.Response.Cookies[cookieName];
if (cookie != null)
{
//将Cookie的Domain更改为.cnblogs.com
//这样就使Cookie能共享于所有的二级域名
cookie.Domain = m_RootDomain;
}
//for (int i = 0; i < app.Context.Response.Cookies.Count; i++)
//{
// if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")
// { app.Context.Response.Cookies[i].Domain = m_RootDomain; }
//}
}
#endregion
}
}