2013-01-10 93 views
2

我在兩個web應用程序之間使用了sql server會話模式。 會話ID在ASPState數據庫中創建。我需要將會話ID從第一個應用程序分享到第二個,而不使用querystring和cookie。我遵循了這個link的步驟。以下是代碼。
在這兩個應用(web.config中)在兩個asp.net web應用程序之間共享相同的SessionId

<add name="DBConnection" connectionString="Data Source=localhost;DataBase=ASPState;Integrated Security=True;uid=sa;pwd=password-1" providerName="System.Data.SqlClient"/> 

<sessionState mode="SQLServer" sqlConnectionString="DBConnection" allowCustomSqlDatabase="true" regenerateExpiredSessionId="false" cookieless="false" timeout="1" ></sessionState>   

<machineKey validationKey="566A547C407CB0C47ABAEC581B8B90C45E15039806352E4611B35E0FB70C1C096350A4BBAE816191331DCA55874D3F96B41FFDED4C6A913591684A90825F53A0" decryptionKey="B299127DFC22648C2EF92D7EDF2E4960277F562C60F3BDE4A4C3BFDFEA602FDF" validation="SHA1" decryption="AES" /> 
<modules runAllManagedModulesForAllRequests="true">  
<add name="BasicAuthenticationModule" type="UserAuthenticator" /> 
</modules> 

在第一個應用程序Home.aspx.cs

protected void imgBTN_Click(object sender, EventArgs e) 
{ 
    string sessionKey = HttpContext.Current.Session.SessionID; 
    //How to transfer the same session id to the second application 
    Response.Redirect("http://localhost:43392/PartnerHome.aspx""); 
} 

我從ASPState的數據庫會話密鑰。但是如何從相同的會話ID傳遞到第二個應用程序?

+3

是否在第二應用程序運行相同的服務器(主機)? –

+0

@HenkHolterman第二個應用程序託管在不同的服務器上。 – kk1076

+0

您可以將會話密鑰發佈到第二個應用程序中的特定頁面。 – VinayC

回答

1

您可以使用SessionManager將ID設置爲目標站點中您想要的任何值。你只需要通過查詢字符串從一個到另一個傳遞GET或形成POST:

來源

Response.Redirect("http://localhost:43392/PartnerHome.aspx?SessID=" 
    + Session.SessionID); 

目標

string sessionId = Request.QueryString["SessId"]; 
bool redirected = false; 
bool isAdded = false; 
new System.Web.SessionState.SessionIDManager().SaveSessionID(
    HttpContext.Current, sessionId, out redirected, out isAdded); 

SessionIDManager on MSDN

+0

是否可以不使用查詢字符串 – kk1076

+0

不確定。您可能需要讓頁面加載到第一個應用中,然後使用javascript將隱藏字段中的sessionid發送到另一個網站。這很麻煩,POST並沒有比GET更安全 – Rhumborl

相關問題