2012-12-25 26 views
6

ajax callには約http generic handlerのアプリケーションがあります。
私はハンドラでセッションにアクセスするためにIReadOnlySessionStateを使用しました。すべて正常に動作しています。
ジェネリックhttpハンドラでセッションタイムアウトを処理する

しかし、セッションが終了すると、ハンドラは、デフォルトのページにリダイレクトされるときにいくつかのhtmlを返し、デフォルトのページのhtmlが応答に返されます。

この問題を解決するには
私はハンドラ内でセッション変数をチェックして、それがnullである場合、私は

context.Response.Write("logout") 

を書かれていると私はそれがログアウトか何かであるjQueryのAjaxの天候で確認してください。


ログアウトしている場合は、場所を使用してログインページにリダイレクトしています。
私はform-authenticationを使用してユーザーを認証しています。

jquery-ajax呼び出しを使用してログインページを確認してリダイレクトする方法はありますか。

+1

それはおそらく良いだろうあなたのハンドラから* 401 Unauthorized *のような適切な[HTTPステータスコード](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)を返すことができます。あなたは論理を繰り返さない)。この値は中央のAJAXオプション( '$ .ajaxsetup')で調べることができるので、チェックするコードは1つの場所に入れるだけです。それはあなたが探している行に沿っているのですか? –

答えて

2

asp.netの認証によって自動的に制御するディレクトリにハンドラがあります。

私がするべきことは、web.configの設定によってasp.net認証によって自動的に制御されないようにすることです。ハンドラへの呼び出しはetherで行われます。ユーザーはetherにログインされません。そのハンドラを呼び出すユーザがセッションと認証を持っているかどうか確認してください。ユーザーは、その後、私は私のAJAX呼び出しに、単純なフラグを返すそのハンドラを読んで認識し、リダイレクトを行うための認証を持っていなかった場合、その後

、例えばとおり

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

良いアイデアと思われます。しかし、 'data'がプロパティ' redirectToLogin'を持っていない場合、 'java-script'例外が発生します。また、webconfigファイルに ''を使用すると、すべてのハンドラ内のユーザセッションをチェックしますが、セキュリティ上の脅威があります。 –

+1

@krshekhar "ko"などの文字列を簡単に返すことができます。これは簡単に解決できます。 – Aristos

関連する問題