これが重複していることはわかっていますが、信頼できるソリューションを取得できませんでした(asp.net Webの場合)。
セッションの有効期限が切れた場合にログイン ページにリダイレクトしたいだけです。私は次のことを試しました:
1.jqueryステータスコードを使用
$.ajax({
type: "POST",
url: "stream.asmx/SomeMethod",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//success msg
},
error: function (request, status, error) {
if (status = 403) {
location.href = 'login.aspx';
}
}
});
問題:これは、他のエラーに対しても同じステータス コード (403) を返します。これは、セッション タイムアウトにのみ期待されます。
2. セッションの有効期限が切れているかどうかにかかわらず、json メッセージを送信する
コードビハインド:
if (!object.Equals(HttpContext.Current.Session["User"], null))
{
Id = int.Parse(HttpContext.Current.Session["User"].ToString());
}
else
{
result = from row in dtscrab.AsEnumerable()
select new
{
redirectUrl = "login.aspx",
isRedirect = true
};
}
$.ajax の成功時:
success: function (msg) {
if (msg.d[0].isRedirect) {
window.location.href = msg.d[0].redirectUrl;
}
else {
//load containt
}
}
問題:セッションが期限切れになった場合、どういうわけか ajax 成功行が呼び出されません (正しい json が返されます)。また、ページに多数の ajax リクエストがある場合(グローバルに処理する必要がある場合)、これも適切な方法ではありません。
しかし、私はこの投稿を見ましたが、これは本当に良い解決策ですが、mvc を使用するためのものですAuthorizeAttribute
: handling-session-timeout-in-ajax-calls
では、asp.net Web API で AuthorizeAttribute を使用して mvc で使用されているのと同じ概念を使用できますか? そうでない場合、直面している問題 (上記の 2 つのいずれか) をトラブルシューティングするにはどうすればよいですか?