3

我们在 .net 中拥有我们的生产网站和一个第三方网络应用程序,该应用程序作为该网站的虚拟应用程序运行。我的任务是维护网站和第三方应用程序之间的会话超时。即只要用户在第三方应用程序上处于活动状态,会话就会保持活动状态,因此当他们返回网站时,即使是在 20 分钟到期后,他们的会话仍然处于活动状态。我们在网站和应用程序中都使用表单身份验证进行会话管理,根据我所读到的内容,我应该能够通过网络配置中的设置来做到这一点。我已经更新了两个 webconfig 文件的身份验证部分

基本上我正在使用 www.mydomain.com 和 www.mydomain.com/app/

    <authentication mode="Forms">
        <forms
           name=".ASPXFORMSAUTH"
           loginUrl="home.aspx"
           enableCrossAppRedirects="true"
           slidingExpiration="true"
           path="/"
           domain=".infinedi.net">
        </forms>

    </authentication>
    <machineKey
          validationKey="BDEA0BE471E4E2C24E5A9552AF232C3E7BF584DBEEAA1262CEE78CB5126FBBBE9E8007DB5ED8357FEE5C2C5B6FF3FC7D34C7CEA54DE3790560FCDEBF44415804"
          decryptionKey="2E31C984223964655C203E3A91AF139B1AE0A964F1475E204E6AACE62840EAB0"
          validation="SHA1"
          decryption="AES"
          />

但这并没有奏效。与提琴手一起观看时,我可以看到,一旦我进入第三方应用程序,我就会得到一个新的 .ASPXFORMSAUTH 会话,我怀疑这就是网站会话超时的原因。是否可以通过 webconfig 执行此操作,或者我应该采取不同的方向?

4

2 回答 2

0

无法使其正常工作,因此不得不使用 iframe。丑陋的解决方案,我将不得不稍后重新访问。

于 2012-05-11T14:12:02.040 回答
0

我认为您遇到的问题是因为 ASP.NET 为每个应用程序分配了一个新的会话 ID。即使您有相同的 cookie 名称和加密参数,内部生成的会话 ID 也会不同。您可以通过手动检测现有会话并更新会话 ID 来解决此问题。这曾经是基于 Flash 的文件上传器的常见解决方法,因为 Flash 没有发送适当的 cookie,因此服务器端的上传处理程序无法识别用户的现有会话。

http://snipplr.com/view/15180/

Using the example code at the above URL, the flash app would post to a URL containing the session ID in the query string, which the BeginRequest handler would detect and update the Request.Cookies collection. I haven't tested this, but you may be able to modify the code a bit to detect the existing cookie from the parent app.

As an alternative, see: Sharing sessions across applications using the ASP.NET Session State Service

于 2012-05-11T14:44:24.993 回答