Để tạo điều kiện cho các trạng thái phiên nhiều tab cho một người dùng mà không làm lộn xộn URL, hãy làm như sau.
Trong chức năng tải hình thức của bạn, bao gồm:
If Not IsPostback Then
'Generate a new PageiD'
ViewState("_PageID") = (New Random()).Next().ToString()
End If
Khi bạn lưu một cái gì đó để phiên bang của bạn, bao gồm các pageid:
Session(ViewState("_PageID").ToString() & "CheckBoxes") = D
Ghi chú:
- Như với phiên ID nói chung, bạn không thể tin tưởng rằng người xem độc hại sẽ không thay đổi SessionID/PageID. Đây chỉ là một giải pháp hợp lệ cho một môi trường mà tất cả người dùng có thể được tin cậy. May mắn thay, ViewState cung cấp sự bảo vệ nhiều hơn là sử dụng trường nhập ẩn.
- Bạn sẽ không có quyền truy cập vào PageID cho đến khi ViewState được khôi phục sau khi PostBack. Do đó, bạn sẽ không có quyền truy cập vào PageID trong trình xử lý page_init().
Nguồn
2010-05-16 16:20:14
Đối với nhà phát triển sử dụng biểu mẫu web ASP.NET, bạn có thể nhận được mức độ bảo vệ từ những người dùng độc hại giả mạo với PageID bằng cách sử dụng ViewState thay vì trường ẩn HTML gốc. Theo mặc định, ViewState được băm bằng khóa máy chủ và ASP.NET ném ngoại lệ nếu dữ liệu được đăng không phải là một băm hợp lệ. Nếu ID phiên bị giả mạo với điều này thường sẽ gây ra một phiên mới được tạo khi dữ liệu tiếp theo được ghi vào đó vì phiên hiện tại sẽ không hợp lệ - cố gắng thu hồi dữ liệu hiện có sẽ dẫn đến ngoại lệ tham chiếu null. Có thể kiểm tra các tài sản này hoặc IsNewSession. – pwdst
@pwdst Điểm tuyệt vời, tôi sẽ điều chỉnh giải pháp để phù hợp! Cảm ơn bạn –
Đây là một giải pháp tuyệt vời cho một câu hỏi mà tôi đã phải đối phó với tuần này cho toàn vẹn dữ liệu tại nơi làm việc. Người dùng đã mở tab thứ hai và sau đó quay lại để cập nhật bản ghi được giữ trong tab đầu tiên, với dữ liệu phiên khóa học được liên kết với bản ghi thứ hai. Tôi đã sử dụng một biến thể của giải pháp này để ngăn cập nhật không chính xác trên bản ghi sai. – pwdst