天天看點

登出退出時删除登入票據不會讓另一個強行退出的方法

使用上述方法會删除所有登入憑證

這樣會現問題,兩個使用者登入,在一個用戶端。一個退出了,另一個沒有退出。另一個會被強行退出。

HttpContext.Current.Session.Abandon(); 會清除用戶端相關所有session.

是以,另一使用者的session也會被清除。

解決辦法一,用Session驗證,不用weform驗證,每次在basePage基類裡驗證.這種辦法有點老土,但可以做到多個使用者在一個用戶端同時登陸.登入時,session裡放一個用于存儲已登入使用者清單,然後還要通過URL傳給後續頁目前登入使用者資訊,接收頁面要記錄目前操作是哪個使用者在操作.哪個使用者退出時,就從session中移出登入哪個使用者資料.轉到登入界面.基類驗證時注意,捕獲URL傳來的使用者資訊,看使用者資訊是否在seeeion裡的使用者登入清單.如果不在,或沒有傳遞參數就拒絕通路.                  

解決辦法二,使用Cookie,使用Webform驗證,但不使用 HttpContext.Current.User.Identity.Name,提取資料依據或做為判斷目前使用者,因為HttpContext.Current.User.Identity.Name裡面記錄的是最後一個使用者登入的資訊.不使用SignOut();退出,因為SignOut();是删除所有使用者登入憑證.

登入時建立票據資訊:

然後重定向,指定頁.

需要使使用者擷取ticket 使用者資訊

退出時,删除相應的Cookie.HttpContext.Current.Response.Cookies.Remove("UserName"); 如果通位址欄,直接進,可以進入(有待研究),就拿使用者名名去查找cookie是否存在,如果不存在,就拒絕通路.

解決辦法三,使用 webform 驗證,可以使用HttpContext.Current.User.Identity.Name,使用SignOut();退出,但一個用戶端隻允許一個使用者登入.不允許多個使用者同時在一個用戶端登入.允許同一使用者或不同使用者,在不同用戶端同時登入.登入:

驗證:這種方式就是不用擔會從位址欄直接進入..net系統會自動攔截.

使用使用者資訊:HttpContext.Current.User.Identity.Name

退出:SignOut();

為防止使用者直接關閉浏覽器,而不點退出按鈕,導至使用者在此用戶端無法再進入.

在頁面如下代碼

lnbOut是退出按鈕id.

強制執行一次,退出

web.config如下:

學習交流群:364976091

繼續閱讀