2009-07-10 19 views
6

Tôi biết đó là một câu hỏi đơn giản, nhưng tôi dường như không thể lôi nó ra khỏi tiếng ồn của Google. Tôi biết .NET có thể sử dụng dịch vụ trạng thái phiên hoặc cơ sở dữ liệu SQL để trả về trạng thái phiên của nó, nhưng tôi không biết liệu ASP có cung cấp bất kỳ tùy chọn ngoài quy trình nào để lưu trữ nó hay không. Liệu nó có bất kỳ, hoặc tôi bị mắc kẹt với mất các biến phiên trên các ứng dụng ASP khi một máy chủ cân bằng tải được đưa vào diễn đàn?Đang trong quá trình cách duy nhất ASP cổ điển có thể lưu trữ trạng thái phiên không?

Trả lời

4

Vâng, chỉ trong bộ nhớ

Từ MSDN Full Article

ASP thực hiện

Các bản phiên ASP chỉ có thể dữ liệu phiên lưu trữ trong bộ nhớ. Để lưu trữ dữ liệu phiên cho SQL Server, một đối tượng Microsoft® Visual Basic® 6.0 COM tùy chỉnh được viết để quản lý trạng thái phiên thay vì sử dụng đối tượng phiên ban đầu. Đối tượng COM này sẽ được khởi tạo ở đầu mỗi yêu cầu Web và tải lại dữ liệu phiên từ SQL Server. Khi kịch bản lệnh ASP kết thúc, đối tượng này sẽ bị chấm dứt và trạng thái phiên sẽ được lưu lại SQL Server.

Mục đích chính của đối tượng Visual Basic 6 COM Session là cung cấp quyền truy cập vào đối tượng nội tại Microsoft® Internet Information Server. Đối tượng Visual Basic 6.0 COM Session sử dụng lớp mySession của SessionUtility Assembly để giữ trạng thái phiên, và lớp SessionPersistence của SessionUtility để tải và lưu dữ liệu phiên với SQL Server. Các lớp mySession và SessionPersistence được hiển thị dưới dạng đối tượng COM sử dụng tiện ích regasm.exe. Tiện ích regasm.exe có thể đăng ký và tạo một thư viện kiểu cho trình khách COM để sử dụng các lớp khung.

Thông tin trạng thái phiên được tải lại trong khi xây dựng đối tượng. Hàm khởi tạo (class_initialize) trước tiên sẽ truy lục cookie phiên, phiên hết giờ (SessionTimeOut) và chuỗi kết nối cơ sở dữ liệu (SessionDSN) từ đối tượng Application và tạo một cá thể của lớp mySession để giữ dữ liệu phiên. Sau đó, hàm tạo sẽ cố gắng tải lại dữ liệu phiên từ SQL Server bằng cookie đã cho. Nếu máy chủ SQL không có thông tin phiên, hoặc phiên đã hết hạn, một cookie mới sẽ được phát hành. Nếu SQL Sever quay trở lại với dữ liệu trạng thái phiên, trạng thái phiên sẽ được lưu trữ trong đối tượng mySession.

+0

Tìm thấy tuyệt vời, cảm ơn rất nhiều! – Chris

+0

Không chắc chắn lý do tại sao đối tượng COM cần phải được viết trong Visual Basic 6.0, nó có thể là bất kỳ ngôn ngữ miễn là kết quả là một đối tượng COM được gọi bằng ngôn ngữ kịch bản được sử dụng trong ASP. – AnthonyWJones

4

Không có gì khác được tích hợp sẵn, mặc dù trong ASP Classic, thật dễ dàng để xây dựng hệ thống quản lý phiên của riêng bạn. hình thức đơn giản nhất là một bảng trong một db như sau:

SessionID int PK, Fields văn bản, giá trị văn bản, Expires DateTime

Hãy đến với một số loại CSV encoder/decoder cho các lĩnh vực và các giá trị và điền một tập hợp trên mỗi trang. Sau đó lưu nó sau khi trang thực hiện và cập nhật thời gian hết hạn. Sau đó, chỉ cần có một cookie theo dõi ID phiên hoặc vượt qua nó xung quanh trong chuỗi truy vấn.

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