同じドメインで 2 つのアプリケーションを実行しています。流れは次のようになります。
- アプリケーション 1
- アプリケーション 1 ->アプリケーション 2
- アプリケーション 2 ->アプリケーション 1
アプリケーション 1は WebForms (asp.net フレームワーク 2.0)、アプリケーション 2は ASP.NET MVC 3 (フレームワーク 4.0) です。
ユーザーがApplication 2を使用している間、 Application 1でセッションを維持したいと思います。
アプリケーション 1をビルドするときに、この記事で説明されているように、要求されたときに単に Session("KeepSesssionAlive") = DateTime.Now() を実行する "KeepSessionAlive.ashx" ハンドラーを組み込みました。これは評価アプリケーションであり、テストの難しい部分では、ユーザーが回答を選択するまでに長い時間がかかる可能性があるためです。コードは次のとおりです。
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 1のセッションが期限切れになるのに十分な時間Application 2にとどまるテストを実行し、 Application 1 -> Application 2からの移行を試行すると、 Application 1の戻りページに到達すると、挨拶されますセッション内のオブジェクトの 1 つを参照しようとしているため、エラーが発生しました。セッションの唯一の値は、Session("KeepSessionAlive") です。これは、新しいセッションが作成されたためだと思いますが、その場合、セッション値をログに記録したテストでApplication 1のすべてのセッション変数が表示されたのはなぜですか?System.NullReferenceException: Object reference not set to an instance of an object.
ユーザーがアプリケーション 2でフォームに入力している間、アプリケーション 1のセッションを維持するために使用できる他の方法はありますか?