在两个ASP.NET Web应用程序之间共享同一个SessionId

3

我在两个web应用程序之间使用了sql server会话模式。会话ID是在ASPState数据库中创建的。我需要在不使用查询字符串和cookie的情况下从第一个应用程序共享会话ID到第二个应用程序。我按照这个链接的步骤进行操作。以下是代码。
在两个应用程序中(web.config)

<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
第二个应用程序运行在同一台服务器(主机)上吗? - H H
@HenkHolterman 第二个应用程序托管在不同的服务器上。 - kk1076
您可以将会话密钥POST到第二个应用程序的特定页面。 - VinayC
@VinayC:如何将会话密钥发布到特定页面。有任何示例吗? - kk1076
@kk1076,你可以使用WebClientWebRequest - 你会发现有很多关于如何使用POST请求的例子。 - VinayC
1个回答

2
你可以使用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);

请查看MSDN上的SessionIDManager

不使用查询字符串是否可能? - kk1076
不确定。您可能需要让页面在第一个应用程序中加载,然后使用JavaScript将带有sessionid的表单发布到其他站点中的hiddenfield。这很混乱,POST并没有比GET提供更多的安全性。 - Rhumborl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接