保持相关ASP.NET应用程序的会话从另一个ASP.NET应用程序保持活动状态

我有2个应用程序在同一个域上运行。 流程如下:

  1. 申请1
  2. 申请1 – > 申请2
  3. 申请2 – > 申请1

应用程序1是WebForms(asp.net framework 2.0), Application 2是ASP.NET MVC 3(框架4.0)

当用户在应用程序2上时 ,我想在应用程序1上保持会话活动。

在构建应用程序1时 ,我们构建了一个“KeepSessionAlive.ashx”处理程序,它在请求时简单地执行Session(“KeepSesssionAlive”)= DateTime.Now(),如本文所述 。 我们这样做是因为这是一个评估应用程序,在测试的一些较难的部分,用户可能需要很长时间才能选择答案。 这是代码:

Public Class KeepSessionAlive : Implements IHttpHandler, IRequiresSessionState Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest context.Session("KeepSessionAlive") = DateTime.Now End Sub Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property End Class 

然后,我只是使用jQuery在Application 1定期调用此处理程序: $.post("KeepSessionAlive.ashx", null, function() { });

所以,我想我可以使用$ .ajax()从Application 2调用相同的处理程序 ,我甚至考虑使用jsonp,但这似乎不起作用。 我编写代码将KeepSessionAlive.ashx中的所有会话变量记录到一个文件中,甚至通过jsonp响应返回东西,数据看起来正确。

但是,做了一个测试,我在应用程序2中徘徊了足够长的时间,以便应用程序1的会话到期,然后尝试从应用程序1 – > 应用程序2进行转换 ,当我到达应用程序1中的返回页面时,我受到了欢迎System.NullReferenceException: Object reference not set to an instance of an object. 错误,因为我试图引用Session中的一个对象。 会话中唯一的值是Session(“KeepSessionAlive”)。 我假设这是因为它创建了一个新会话,但如果是这样的话,为什么我的测试会记录会话值显示应用程序1的所有会话变量?

当用户填写应用程序2中的表单时,是否还有其他方法可用于使应用程序1的会话保持活动状态?

在每个网站上创建一个页面,即可以不时地重新加载一个小图像。
现在,您将加载一个返回图像的处理程序,而不是图像。

   

然后在应用程序中使用iframe,使用图像重新加载来加载其他应用程序页面。 或者通常使用iframe,因为使用iframe,您可以保留来自2个不同站点的Cookie更新。

  

相关: 重置会话超时而不在ASP.Net中进行回发