2009-09-14 33 views
11

Tôi có một trang web đang sử dụng xác thực mẫu và tư cách thành viên. Người dùng phải bật cookie để sử dụng trang web. Tôi đã được yêu cầu thay đổi mã để id phiên được thay đổi ngay sau khi người dùng đăng nhập. Aparently điều này sẽ bảo vệ chống lại một cuộc tấn công phiên Fixation (http://en.wikipedia.org/wiki/Session_fixation). Có ai biết làm thế nào tôi có thể thay đổi id phiên mà không làm mất toàn bộ phiên? PHP có một phương pháp cụ thể để làm điều này nhưng tôi không thể tìm thấy một NET tương đương.cách thay đổi id phiên sau khi đăng nhập trong asp.net

Trả lời

5

Here's a blog post rằng cuộc đàm phán về vấn đề này:

ASP.NET không trực tiếp hỗ trợ chức năng để tái tạo một phiên ID. Xem tài liệu về số vấn đề here. Có một not-so quick and dirty way để làm điều đó bằng cách đặt giá trị ASPNET_SessionID thành chuỗi trống và chuyển hướng để rằng giá trị được tạo lại.

+1

i aslo nghĩ về điều này, nhưng sau khi tái tạo đó, tất cả các đối tượng trong đối tượng session sẽ mất ... – MemoryLeak

+1

Các bài đăng trên blog mà bạn liên kết đến không còn nữa. –

6

Tôi đã trả lời câu hỏi tương tự tại Generating a new ASP.NET session in the current HTTPContext. Về cơ bản chúng ta phải thay đổi một số trạng thái bên trong SessionStateModule để có thể tạo lại session ID mà không làm mất các đối tượng trong Session. Tôi đã sử dụng sự phản chiếu để thiết lập trường _rqId thành ID mới và _rqSessionStateNotFound thành true. Nhược điểm là chúng ta phải cấp "Full Trust" cho Ứng dụng.

+2

[câu trả lời được chấp nhận] (http://stackoverflow.com/a/1419508/295686) tham chiếu một bài viết được nhắm mục tiêu tại .NET 1.1 (và nó không thực sự giải quyết phiên làm việc, chỉ sử dụng lại phiên cũ), nhưng điều này giải pháp là thanh lịch hơn và làm việc trong ứng dụng .NET 4.5 của chúng tôi (một trang MVC và một trang Web Forms). – mlhDev

1

Đây là một câu hỏi thực sự cũ Tôi đang hồi sinh, nhưng đây là giải pháp:

var manager = new SessionIDManager(); 
bool redirected, isAdded; 
manager.SaveSessionID(System.Web.HttpContext.Current, 
    "5vonjb4mtb1of2fxvhjvkh5d", out redirected, out isAdded); 

// sessionId now equals "5vonjb4mtb1of2fxvhjvkh5d" 
var sessionId = Session.SessionID; 
+0

Tôi biết, đã lâu rồi. Nhưng chúng tôi đã thử mã của bạn và nó không hoạt động cho chúng tôi. sessionId không bằng "5vonjb4mtb1of2fxvhjvkh5d". – mosquito87

+0

tôi đã làm điều này với thành công. sessionid đã thay đổi thành sessionid mới. – pinopino

+2

Điều này đã cho chúng tôi gần gũi hơn nhưng không đủ gần - vẫn làm việc trên đó. Điều này sẽ cập nhật ID phiên và gửi cập nhật cookie giống như bạn mong đợi nhưng chúng tôi vẫn muốn sử dụng phiên trong cùng yêu cầu đó. Chúng tôi không thể làm điều đó ngay bây giờ - xuất hiện túi phiên là người trước; yêu cầu tiếp theo thấy túi phiên mới nhưng giá trị của chúng tôi không có ở đó. – mlhDev

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