回覆列表
  • 1 # 使用者4163059234182

    Session共享的解決方案

    1、客戶端SessionID值唯一;

    對於不同的域名:主域名、子域名、跨站點域名或跨伺服器域名,使用者在開啟頁面時會產生不同的SessionID,

    為了使這些站點在使用者登入時只登入一次,那我們就要解決SessionID的問題,必須使SessionID在這些共享Session的站點中只產生一次。而SessionID是儲存在客戶端的cookie之中鍵值為ASP.NET_SessionId的一個字串(也可以儲存在URL中,這裡不作使介紹),為此只須使各站點儲存的SP.NET_SessionId唯一即可。

    因每個客戶端在開啟時會產生一個SessionID,為此我們要做的就是重置SessionID。我們可以在繼承HttpModule,在結束請求時重寫SessionID

    程式碼:

    public class MakeSessionIDOneOnly : IHttpModule

    {

    private string m_RootDomain = string.Empty;

    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;

    for (int i = 0; i

    {

    if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")

    {

    app.Context.Response.Cookies[i].Domain = m_RootDomain;

    }

    }

    }

    }

    為使用以上程式碼,須配置下面節點項。

  • 中秋節和大豐收的關聯?
  • 李榮浩的歌現在都很火,他是我是歌手之後開始走紅的嗎?