0

AccountControllerでログアウトする方法があるAsp.netMVC3アプリケーションに取り組んでいます。

 public ActionResult LogOff()
        {
            try
            {
               // Session.User = null;

                this._authenticationService.SignOut();

                return RedirectToAction("Login", "Account");
            }
            catch (Exception e)
            {

                return View("Error");
            }
        }

global.asax.csのSession_Endメソッドからこのメソッドを呼び出したい、またはRedirectToAction("Login", "Account");global.asax.csファイルから呼び出す他の方法はありますか。

4

4 に答える 4

0

Ajax + JavaScript ベースのソリューションを使用する必要があります。同様のスレッドを確認してください。

ASP.Net でのクライアント側セッション タイムアウト リダイレクト

于 2013-02-13T06:20:52.630 に答える
0

Global.asax.cs ファイルで次のように試してください。

protected void Session_End()
    {
        // Clear the error on server. 
        Server.ClearError(); 
        Response.Clear(); 

        RouteData routeData = new RouteData(); 

        routeData.Values.Add("controller", "Account"); 
        routeData.Values.Add("action", "Login"); 


        // Call target Controller and pass the routeData. 
        IController AccountMainController = new AccountController(); 
        AccountMainController.Execute(new RequestContext( 
                new HttpContextWrapper(Context), routeData));
    }
于 2013-02-13T06:21:06.687 に答える
0

「Session_End」は、どのリクエストにも、どのリクエスト フローにも対応しないため、コントローラー アクションのリダイレクト/実行は HTML をブラウザーに返しません。ブラウザがサーバーにリクエストを送信している限り、「Session_End」が実行される可能性はほとんどありません。おそらく、セッションに保存されたオブジェクトを使用できます。セッションが終了すると、オブジェクトはセッション ストアから破棄されます。

MVC の Begin_Request イベントまたはグローバル フィルターに共通のコードを記述すると、そのオブジェクトの存在を確認し、必要に応じてユーザーをログオフ アクションにリダイレクトできます。

于 2013-02-13T13:31:01.150 に答える
0

現在のプロジェクトで signalr を使用できるかどうかはわかりませんが、使用できる場合は、signalr を使用して、セッションが期限切れになった場合にクライアント側でリダイレクトを呼び出すことができます。

サーバー側でのようなもの:

protected void Session_End()
{
    GlobalHost.ConnectionManager.GetHubContext<ConnectionStateHub>().Clients[{yourClientsId}].SessionExpired({yourRedirectTarget});
}

クライアント側では、次のようなものがリダイレクトを作成できます。

var sessionHub = $.connection.sessionHub;
sessionHub.sessionExpired = function(target) { window.location = target; }
于 2013-02-14T09:45:54.683 に答える