Google Code Prettify

ASP.NET Core Web App 如何在瀏覽器關閉時登出系統?

在 ASP.NET Core Web 應用程式中,如果想要在瀏覽器關閉時自動登出系統,可以使用以下幾種方法來實現:


方法一:使用 Session 和 JavaScript
1. 設定 Session 過期時間
在 Startup.cs 中設定 Session 過期時間。這樣可以確保當瀏覽器關閉時,Session 將會過期。

csharp

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(20); // 設定 Session 過期時間
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });

    services.AddControllersWithViews();
}



2. 在 Razor View 中加入 JavaScript
在你的 _Layout.cshtml 或其他共享的 Razor View 中加入以下 JavaScript,這段程式碼會在瀏覽器關閉時發送請求給後端登出使用者。

html
<script>
    window.addEventListener("beforeunload", function (event) {
        navigator.sendBeacon('/Account/Logout');
    });
</script>



3. 建立登出動作
在 AccountController 中建立登出動作,處理登出請求。

csharp

public class AccountController : Controller
{
    [HttpPost]
    public IActionResult Logout()
    {
        // 清除使用者的認證資料
        HttpContext.Session.Clear();
        // 或者使用SignOut
        // await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

        return NoContent();
    }
}



方法二:使用 Cookie 和 JavaScript

1. 設定 Cookie 過期時間
在 Startup.cs 中設定 Cookie 認證過期時間。
csharp

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.ExpireTimeSpan = TimeSpan.FromMinutes(20); // 設定 Cookie 過期時間
            options.SlidingExpiration = true;
        });

    services.AddControllersWithViews();
}



2. 在 Razor View 中加入 JavaScript
同樣在 _Layout.cshtml 中加入以下 JavaScript 程式碼,這段程式碼會在瀏覽器關閉時發送請求給後端登出使用者。

html
<script>
    window.addEventListener("beforeunload", function (event) {
        navigator.sendBeacon('/Account/Logout');
    });
</script>




3. 建立登出動作
在 AccountController 中建立登出動作。

csharp
public class AccountController : Controller
{
    [HttpPost]
    public IActionResult Logout()
    {
        // 清除使用者的認證資料
        HttpContext.Response.Cookies.Delete(".AspNetCore.Cookies");
        // 或者使用SignOut
        // await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

        return NoContent();
    }
}



小結 通過以上方法,我們可以在瀏覽器關閉時自動登出使用者。這些方法主要依賴於 JavaScript 的 beforeunload 事件以及後端的登出處理邏輯。在實際應用中,可能還需要根據具體情況進行調整,例如設定適當的 Session 或 Cookie 過期時間,確保安全性和用戶體驗。