2015-06-08 59 views
0

我需要註銷一個用戶,以防他關閉運行我的網站的瀏覽器/標籤。我已將isPersistant布爾設置爲false,但它不會將用戶登出。如果選項卡關閉,我想強制用戶再次登錄。我不想使用jQuery。在瀏覽器或標籤上註銷close

下面是一些從我目前的代碼中的相關片斷:

的AccountController

var result = await SignInManager.PasswordSignInAsync(model.Username, 
    model.Password, false, shouldLockout: true);` 

Startup.Auth

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
     validateInterval: TimeSpan.FromMinutes(5), 
     regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))      
    } 
});    

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 
+1

它不容易實現。你需要像心跳一樣告訴服務器用戶仍然打開一個標籤/窗口。也就是定期從瀏覽器向服務器發送確認(通過HTTP請求)。考慮一下:當用戶打開兩個選項卡並且它們都包含您的應用程序並且用戶關閉其中一個時會發生什麼? –

+0

@AndreiV我明白你在做什麼。我目前正在調查SignalR作爲一種可能的解決方案,我看到的唯一問題是回發會破壞與Hub的連接,這可能看起來像一個正在關閉的標籤。 – Swifty

+0

我不確定我明白你的意思是回發並斷開連接。我在想的是一個JS腳本,它定期(1-2-3-X分鐘)向服務器發送一個AJAX請求,告訴它用戶仍然至少打開一個標籤。 –

回答

0

由於@AndreiV狀態,沒有檢測用戶關閉瀏覽器的方式。

我選擇實施SignalR並監控斷開連接事件的連接,此時,根據某些標準,我對用戶的會話進行了未認證。如果他然後回來的網站,我知道他的會議不再有效,他被重定向到登錄頁面。