2012-10-12 38 views
7

Tôi là một nhà phát triển mới và tôi đã được giao nhiệm vụ tìm ra lý do tại sao chức năng đăng xuất của chúng tôi không hoạt động. Tôi đã thử mọi phương pháp có thể tôi có thể tìm thấy. Dưới đây là nhật ký tôi đã lưu giữ bao gồm các phương pháp tôi đã sử dụng.Xóa phiên trong ASP.NET

  1. Added nút một khúc gỗ ra mẫu CommonHeader.ascx

  2. đã thử nhiều phương pháp trong các hình thức logout.aspx.vb để có được nó để kết thúc hoặc xóa phiên nhưng không ai trong số họ làm việc.

a. ClearSession sub routine được định nghĩa trong biểu mẫu logout.aspx.vb:

Session("Variable") = "" 
FormsAuthentication.SignOut() 
Session.RemoveAll() 
Session.Abandon() 
Session.Clear() 

b. Ngoài ra, hãy thêm phần này vào đầu thói quen phụ Page_Load:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache) 
HttpContext.Current.Response.Cache.SetNoServerCaching() 
HttpContext.Current.Response.Cache.SetNoStore() 

c. Cũng đã thay đổi thói quen phụ ClearSession thành Session.Contents.Remove("Variable") từ Session("Variable") = ""

Không có phương pháp nào trong số này hoạt động. Chúng tôi sử dụng Siteminder và tôi đã tự hỏi liệu đây có phải là gốc của sự cố không. Tôi không thể tìm thấy bất kỳ nội dung nào về việc xóa một Phiên sử dụng Siteminder. Cũng nên nhớ ứng dụng này được mã hóa với Visual Studio 2003.

Đây là mã cho nút Tôi đang sử dụng trong file ascx:

athp: TopNavText Title = "Log Out" NavigateUrl = "logout .aspx "Target =" _ top "/

Sau đó, trên biểu mẫu" logout.aspx "tôi đã thử chỉ sử dụng một trong các phương pháp được mô tả ở trên hoặc kết hợp từng phương pháp. Đây là mã trước khi tôi chạm vào nó:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    ClearSession() 
    Response.Redirect("login.aspx") 

End Sub 

Public Sub ClearSession() 

    Session("Variable") = "" 

End Sub 
+0

Bạn đã xác minh bằng cách gỡ lỗi rằng quy trình phụ ClearSession của bạn đã được gọi? (đặc biệt khi bạn có Session.Abandon() trong đó) –

+0

Nếu bạn đang sử dụng VS2003, thì bạn đang sử dụng .NET 1.1. –

+0

Có, nó chắc chắn chạm vào thói quen phụ. Tôi đặt dấu trong mã để xác minh nó đã không dừng lại trước khi nó đạt đến chương trình con ClearSession. Nó chỉ được gọi khi trang tải, sau đó nó được chuyển hướng đến trang đăng nhập, nhưng nó vẫn chuyển hướng tôi trở lại trang chủ với tôi vẫn đăng nhập khi tôi có Response.Redirect ("login.aspx") unquoted. – gbills

Trả lời

2

Cuối cùng đã tìm ra giải pháp, ban đầu tôi không xác định tên miền khi xóa cookie chứa id phiên trang web. Mã tôi đã sử dụng như sau:

 Dim cookie3 As HttpCookie = New HttpCookie("SMSESSION", "NO") 
     cookie3.Expires = DateTime.Now.AddYears(-1) 
     cookie3.Domain = ".domain.com" 
     Response.Cookies.Add(cookie3) 

     Response.Redirect("login.aspx") 
0

Câu hỏi này: formsauthentication-signout-does-not-log-the-user-out mô tả một vấn đề với không xóa cookie thậm chí sau khi gọi FormsAuthentication.SignOut(). Điều này nghe có vẻ như vấn đề của bạn, họ nói rằng đó là một lỗi với. NET và như bạn đang sử dụng 1,1 này âm thanh rõ ràng nhất có thể.

+0

sử dụng ví dụ đó cho tôi lỗi này: Trình biên dịch Thông báo lỗi: BC30108: 'HttpCookie' là một loại và không thể được sử dụng như một biểu thức. Dòng 36: HttpCookie cookie1 = new HttpCookie (FormsAuthentication.FormsCookieName, "") – gbills

+0

Ok Tôi đã sửa lỗi trình biên dịch đó, nhưng nó vẫn không hoạt động khi sử dụng ví dụ đó. – gbills

0

HI bạn bè vui lòng thêm sự kiện nhấp của nút trong điều khiển người dùng. Và trong sự kiện nhấp, vui lòng thêm mã sau và xóa tất cả các mã khác.

Phiên ("Biến") = "";

+0

@denas Tôi đã đăng mã ở trên trong câu hỏi của mình – gbills

0

xem bài này

C# Clear Session

Dù c của nó sắc nét hoặc vb các quy tắc tương tự vẫn được áp dụng. Bạn đang gọi phiên bỏ qua sau đó rõ ràng, nhưng do thời gian bạn gọi rõ ràng phiên nên được đi anyway.

Xóa giữ trạng thái phiên cùng với các đối tượng trong đó, do đó, bằng cách gọi nó sau khi từ bỏ, bạn có thể đang khởi tạo lại phiên cho người dùng, nhưng với các biến đã xóa.

Xem bài đăng này cho trình tự, cách thích hợp để giết phiên và chuyển hướng đến trang đăng nhập nếu bạn có một

FormsAuthentication.SignOut() does not log the user out

0

Điều đầu tiên cần lưu ý là, nếu bạn đang sử dụng hình thức Xác thực, Phiên hoàn toàn không liên quan đến việc người dùng có đăng nhập hay không.

sẽ xóa thông tin vé xác thực biểu mẫu khỏi cookie hoặc URL nếu CookiesSupported là sai.

Nhưng nó sẽ không ảnh hưởng đến nội dung được lưu trữ trong Phiên.

CẬP NHẬT

Tại sao bạn nghĩ log out (FormsAuthentication.SignOut) không làm việc? Bạn đang mong đợi điều gì sẽ xảy ra khi bạn nhấp vào Đăng xuất, và chính xác những gì đang thực sự xảy ra?

Tôi muốn loại bỏ tất cả mã để xóa Phiên và xem xét điều này. Ví dụ: xem lưu lượng truy cập http bằng công cụ như Fiddler: bạn sẽ có thể thấy cookie FormsAUthentication bị xóa khi bạn nhấp vào Đăng xuất.

+0

Cảm ơn bạn đã xóa thông tin đó. Tôi chỉ nghĩ rằng tôi sẽ thử nó bởi vì vào thời điểm này tôi chỉ muốn nó hoạt động. Chúng tôi đang sử dụng không gian tên System.Web.SessionState mà tôi sẽ giả định sẽ có thể sử dụng một số phương pháp tôi đã thử ở trên. – gbills

+0

Khi tôi nhấp vào Đăng xuất, tôi đang cố gắng chuyển nó đến trang Đăng nhập của tôi. Thay vào đó nó chỉ chuyển hướng tôi trở lại trang chính của tôi. Tôi đã thử từng phương pháp mà tôi đã liệt kê ở trên và đối với từng phương pháp theo Fiddler, cùng một cookie vẫn được sử dụng. Tôi tin rằng nó có liên quan đến Siteminder, nhưng tôi không thể tìm ra cách để giết một phiên Siteminder – gbills

+0

@GarrettBills, Nó gần như chắc chắn liên quan đến SiteMinder. Tôi không quen thuộc với SiteMinder vì vậy tôi đã thêm một thẻ SiteMinder vào câu hỏi của bạn với hy vọng rằng ai đó sẽ thấy nó.Tôi cho rằng bạn sẽ cần phải hết hạn bất kỳ cookie nào đang được sử dụng bởi SiteMinder (thông thường bằng cách đặt ngày hết hạn của nó cho một ngày trong quá khứ) - bạn sẽ có thể thấy cookie bằng cách sử dụng Fiddler. – Joe