使用上述方法會删除所有登入憑證
這樣會現問題,兩個使用者登入,在一個用戶端。一個退出了,另一個沒有退出。另一個會被強行退出。
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