2011-02-03 4 views
17

Tôi gặp vấn đề với GenericHandler và anonymousIdentification.ASP.NET Generic Handlers & Session

Về cơ bản nếu <anonymousIdentification enabled="true" /> được bật trong cấu hình web, bất cứ khi nào yêu cầu GET/POST của JQuery được gửi đến máy chủ, yêu cầu đó sẽ thực thi theo người dùng mới và phiên người dùng mới.

Có cách nào để giảm thiểu điều này không? Tôi cần truy cập vào các biến phiên của người dùng hiện tại ... Nó thực sự bực bội!

+0

tôi đã không kiểm tra nó nhưng tôi nghĩ rằng nếu bạn đang gửi một jQuery GET req. từ khách hàng sau đó nó được xử lý trong bối cảnh người dùng hiện tại .. kiểm tra với fiddler là cookie phiên ASP.net cùng cho cả yêu cầu bình thường và jquery –

+0

Vì vậy, nếu bạn tắt ID vô định nó hoạt động? Bạn đang sử dụng biểu mẫu auth? Bạn có thể tắt anon cho đường dẫn cụ thể đó trong web.config không? – jcolebrand

+0

Tôi sẽ thử và xem liệu điều này có hoạt động không @drachenstern. Bạn sai @Shekhar_Pro. Tôi lưu trữ dữ liệu người dùng trong phiên; một giá trị là UserRegistratinoState. Nếu tôi đến từ một trang mà người dùng vừa đăng ký giá trị enum trong phiên là UserRegistrationState.Registered. Tôi đã xác minh điều này. Tuy nhiên, khi tôi gọi trình xử lý từ js trên trang khác, dòng đầu tiên của mã trong trình xử lý sẽ kiểm tra biến phiên đó. Nếu biến không tồn tại, nó sẽ tự động trả về UserRegistrationState.Anonymous. Tôi nghĩ rằng nó an toàn để giả định rằng Nhận yêu cầu từ JQuery đang thực hiện theo một người dùng mới. – bleepzter

Trả lời

38

Trình xử lý chung phải triển khai giao diện IReadOnlySessionState để truy cập vào các biến phiên. Nếu bạn cũng cần phải viết các biến phiên, hãy thực hiện IRequiresSessionState.

+1

Tôi sẽ thử điều này trong giây lát. Cảm ơn @Josh Stodola – bleepzter

+2

nên đọc: ** public class MemberHandler: IHttpHandler, IRequiresSessionState ** –

+0

Tôi có vấn đề mà xử lý không gửi lại cookie phiên làm việc nếu có yêu cầu để xử lý là người đầu tiên trang web (không có phiên id thực tế) và Tôi nghĩ rằng khi 'IReadOnlySessionState' xuất phát từ' IRequireSessionState' sẽ là đủ. Nhưng tôi thực sự phải sử dụng 'IRequireSessionState' một cách rõ ràng. Cảm ơn bài đăng đó. – jgasiorowski

-2

Tôi đề xuất trong trình duyệt web bạn bật tab mạng ở chế độ nhà phát triển. Sau đó kiểm tra trong AJAX cookie nào được gửi (nếu có).

Nếu bạn không thấy bất kỳ cookie nào, điều đó có nghĩa là trình duyệt không nhận được bất kỳ phiên nào, do đó bạn nên đảm bảo (như đã nêu bởi Josh) để kế thừa giao diện phù hợp và truy cập cookie. (Don'f quên sử dụng System.Web.SessionState)

Để tạo ra các cookie, truy cập sessionid đối tượng session của:

string sesId = context.Session.SessionID; 

Trước bạn viết bất cứ điều gì để phản ứng.

+1

-1 Rất có thể và đáng tin cậy khi có trạng thái phiên không nấu nướng và việc truy cập vào số nhận dạng chắc chắn không "tạo" cookie –

+0

Đó không phải là những gì tôi đã nói, đọc lại. –

+0

Tôi đọc nó ba lần. Tôi không cần phải đọc lại. –

1

Bạn có thể sử dụng này:

public class Handler : 
    IHttpHandler, 
    System.Web.SessionState.IReadOnlySessionState 
11

Thực hiện giao diện System.Web.SessionState.IRequiresSessionState:

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    {  
    context.Session["StackOverflow"] = "overflowing";  
    context.Response.Redirect("~/AnotherPage.aspx");  
    } 

} 
+0

tôi muốn nhận giá trị phiên trong trình xử lý chung để tải hình ảnh lên khóa chính mà tôi đã lưu trữ trong phiên, tôi đang sử dụng plugin tải lên hình ảnh jquery và nó liên kết tất cả thuộc tính trên tài liệu sẵn sàng. tôi đã sử dụng iRequiresSessionState trong mã trình xử lý của mình nhưng vẫn không thể truy cập các giá trị phiên. khóa phiên vẫn là 0. bất cứ ai có thể cho tôi biết về điều này? –