2012-11-25 20 views
5

Tôi đang chạy ASP.NET MVC 4 với tất cả mã thành viên mặc định. Mã cho Logoff AccountController là:SimpleMembershipProvider không hủy phiên sau WebSecurity.SignOut

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOff() 
    { 
     WebSecurity.Logout(); 

     return RedirectToAction("Index", "Home"); 
    } 

tôi nhận thấy rằng mã này không phá hủy phiên giao dịch, có nghĩa là nếu tôi đăng nhập bằng một tài khoản, tiết kiệm cái gì đó để phiên, sau đó đăng xuất và đăng nhập bằng một tài khoản khác trong cùng một trường hợp của trình duyệt web, tôi vẫn có thể xem phiên của người dùng trước đó.

Không chắc chắn tại sao điều này xảy ra. Mọi lời khuyên sẽ được đánh giá cao. Cảm ơn.

Trả lời

7

Phiên phiên và xác thực không giống nhau.

Tại đây bạn đã hủy xác thực cho người dùng, nhưng bạn đã khởi động lại phiên ASP.NET.

More explanatition đây: https://stackoverflow.com/a/1306932/971693

Hãy thử làm điều này:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult LogOff() 
{ 
    WebSecurity.Logout(); 

    Session.Abandon(); 

    // clear authentication cookie 
    HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
    cookie1.Expires = DateTime.Now.AddYears(-1); 
    Response.Cookies.Add(cookie1); 

    // clear session cookie (not necessary for your current problem but i would recommend you do it anyway) 
    HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); 
    cookie2.Expires = DateTime.Now.AddYears(-1); 
    Response.Cookies.Add(cookie2); 


    return RedirectToAction("Index", "Home"); 
} 
4

Đây là chi tiết 'tại sao' một phần của câu trả lời.

Xem xét giỏ hàng như Amazon có liên kết 'This is not me' bên cạnh tên người dùng ở đầu màn hình.

Nếu bạn thêm thứ gì đó vào giỏ hàng, nhưng WebSecurity.Logout phải xóa phiên của bạn thì bạn sẽ mất dữ liệu phiên này.

+0

hoặc nói cách khác - họ để bạn quyết định thời điểm rõ ràng hoặc không rõ ràng phiên –

Các vấn đề liên quan