0

IHttpHandlerサーバー上のいくつかの異なるクラスに対していくつかの AJAX 要求を行う jQuery Mobile アプリを作成しています。ハンドラーはすべて JSON または JSONP を返しcontext.Session.SessionID、デバッグの目的で JSON に を含めます。最初のハンドラーに 1 つの要求を行い、セッション ID "2jysbehwyxlne0knatltcb2z" を取得します。別のハンドラーに別のリクエストを行うと、セッション ID "qy3v251fxrxesbgqeobqvaza" が返されます。これは互いに数秒以内です。何が起こっている?セッションが長時間経過して期限切れになるまで、セッション ID は同じであると予想されます。

同じタブで AJAX を使用するのではなく、独自のタブでリクエストを開くと、同じセッション ID が返されます。そのため、認証するためのリクエストと、データを取得するための他のリクエストの場合、これらのリクエストがページ内の AJAX リクエストとして発生すると、セッション ID が異なります。Chrome のコンソールの [ネットワーク] タブを参照して右クリックし、各要求を新しいタブでリンクを開くと、同じセッション ID を持つ期待どおりに機能します。

で jQuery Mobile アプリケーションを実行しており、問題があればhttp://localhostでハンドラにリクエストを送信しています。https://localhost私のハンドラはすべて実装していますIRequiresSessionStateこの質問は私のものと同じように見えますが、その唯一の答えは実装IRequiresSessionStateすることです。これは既に行っています。

編集: この質問は関連している可能性がありますが、Chrome でこの動作を観察しています。

編集: jQueryのgetJSON機能を使用してAJAXリクエストを作成しています。 Cookieに関するこの質問が関連している可能性があります。getJSON

4

1 に答える 1

0

私の問題は、AJAX リクエストを送信するためにjQuery のgetJSONメソッドを使用していたことにあると思います。最終的に Web.config に追加<sessionState cookieless="true" />したので、ハンドラーS(the_session_id))は URL に固定されます。最初のリクエストをハンドラーに送信するとき、JSON で返されたセッション ID を HTML 5 ローカル ストレージに保存します。後続のすべてのリクエストで、そのセッション ID を URL に渡します。これは理想的な解決策ではありません。さらに調査して、セッションで Cookie を再び使用できるかどうかを確認するかもしれません。

于 2012-06-26T18:44:39.813 に答える