2009-04-08 3 views
8

Sử dụng phương pháp này sau khi lệnh SignOut() chuyển hướng đến '... login.aspx? ReturnUrl =% 2fmydomainname% 2flogout.aspx' để người dùng không thể đăng nhập lại, vì đăng nhập thành công trở về trang đăng xuất. Trang đăng nhập được đặt trong webconfig và ứng dụng đã tải trang đó thành công. Tại sao một ReturnURL lại bị kẹt ở đuôi của URL?FormsAuthentication RedirectToLoginPage Quirk

Trả lời

15

Đây là cách hoạt động của RedirectFromLoginPage. Nó nối URL hiện tại vào chuỗi truy vấn của trang đăng nhập. Bằng cách này, trang đăng nhập có thể chuyển hướng người dùng trở lại địa điểm anh ta ở đâu.

Nếu bạn không muốn điều này xảy ra, bạn có thể chuyển hướng thủ công đến trang đăng nhập bằng cách sử dụng Response.Redirect.

+1

Để bắt chước hành vi FormsAuthentication mà không cần phải ReturnUrl, gọi 'Response.Redirect (FormsAuthentication.LoginUrl, false); ' –

+2

Và thêm sau đó một cuộc gọi để 'HttpContext.Current.ApplicationInstance.CompleteRequest()' –

+0

Rõ ràng thực hành tốt nhất sẽ là không bao giờ sử dụng FormsAuthentication.RedirectToLogin() từ bên trong một trang Logout đăng nhập người dùng. Hơn nữa, có một chuỗi các phương thức được đề xuất để gọi trong trang đăng xuất để đảm bảo rằng tất cả các tạo phẩm FormsAuthentication đều bị xóa - Xem http://stackoverflow.com/questions/412300/formsauthentication-signout-does-not-log-the-user -out – condiosluzverde

0

Không chắc chắn nếu điều này giúp, nhưng theo các tài liệu cũng có một FormsAuthentication quá tải.RedirectToLoginPage phương pháp mà mất một chuỗi và "chuyển hướng trình duyệt đến URL đăng nhập với chuỗi truy vấn chỉ định".

Xem http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirecttologinpage.aspx

+1

Không, nó chỉ thêm chuỗi truy vấn tùy chỉnh của bạn sau ReturnUrl của chính nó. –

1

sử dụng mã này vào logout

<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="/xyz.aspx" LogoutAction="Redirect" /> 
+0

Bạn có thể vui lòng chỉnh sửa trong phần giải thích tại sao mã này trả lời câu hỏi không? Các câu trả lời chỉ có mã được [nản chí] (http://meta.stackexchange.com/q/148272/274165), bởi vì chúng không dạy giải pháp. (Bài đăng này đã được gắn cờ bởi ít nhất một người dùng, có lẽ vì họ nghĩ rằng một câu trả lời mà không cần giải thích nên bị xóa.) –