我有 2 个应用程序在同一个域上运行。流程是这样的:
- 应用 1
- 应用 1 ->应用 2
- 应用 2 ->应用 1
应用程序 1是 WebForms(asp.net 框架 2.0),应用程序 2是 ASP.NET MVC 3(框架 4.0)
当用户在Application 2上时,我想在Application 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
Application 1
然后,我只需使用 jQuery
定期调用此处理程序:$.post("KeepSessionAlive.ashx", null, function() { });
所以,我想我可以使用 $.ajax() 从应用程序 2调用相同的处理程序,我什至研究过使用 jsonp,但这似乎不起作用。我编写了代码来将 KeepSessionAlive.ashx 中的所有会话变量记录到文件中,甚至通过 jsonp 响应返回内容,并且数据看起来正确。
但是,在进行测试时,我在Application 2中逗留了足够长的时间以使Application 1的会话到期,然后尝试从Application 1 -> Application 2进行转换,当我到达Application 1中的返回页面时,我受到了欢迎有一个System.NullReferenceException: Object reference not set to an instance of an object.
错误,因为我试图引用 Session 中的一个对象。session 中的唯一值是 Session("KeepSessionAlive")。我认为这是因为它创建了一个新会话,但如果是这种情况,为什么我的测试记录了显示所有Application 1会话变量的会话值?
当用户填写应用程序 2中的表格时,我可以使用其他方法来保持应用程序 1的会话活动吗?