2012-11-04 20 views
5

Bối cảnh:Theo dõi phiên và hình thức xác thực thời gian hết hạn còn lại trên máy chủ

lại tại nơi làm việc, tôi đang làm việc trên một Web Forms App có sử dụng mặc định, trượt hết hạn cho phiên và FormsAuthentication outs thời gian. Nhiệm vụ của tôi là theo dõi người dùng không hoạt động và, nếu cần, hiển thị cửa sổ phương thức với cảnh báo về hết hạn phiên, hẹn giờ và nút để làm mới thời gian phiên làm việc (cũng sẽ làm mới thời gian xác thực biểu mẫu). Nút được kết nối với sự kiện trên trang cái với một thân trống, nó hiện công việc. (Tôi biết các giải pháp khác).

giải pháp một phần làm việc:

cách tiếp cận của tôi là để sử dụng trang chủ Page_PreRender phương pháp để có được phiên và FormsAuthentication thời gian ra giá trị, so sánh chúng và vượt qua giá trị nhỏ hơn (hoặc có) cho trình duyệt của khách hàng (với các dữ liệu cần thiết khác). Trong trình duyệt, sau đó tôi sẽ hiển thị cảnh báo với bộ đếm thời gian tại một số thời điểm cụ thể trong cửa sổ phương thức và tất cả sẽ hoạt động như dự định ... đó là ... khi người dùng không làm gì cả.

Vấn đề:

ứng dụng của chúng tôi có rất nhiều các trang web có cập nhật tấm. Các bảng cập nhật này được sử dụng để tương tác và thao tác dữ liệu được lưu trữ trong Phiên. Bất cứ khi nào người dùng làm một cái gì đó bên trong một trong những bảng cập nhật, phiên thời gian ra các slide (khởi động lại). Tôi không thể theo dõi những thứ đó trên máy khách (trong thế giới thực), tôi cần một cách để theo dõi hết hạn phiên trên máy chủ.

Những điều tôi không muốn làm

tôi không' muốn đi qua từng trang riêng lẻ, mỗi GridView duy nhất, mỗi ImageButton vv đơn và để ràng buộc một số sự kiện khách hàng để theo dõi hành động người dùng. Tôi muốn nhiều hơn ... giải pháp chung và duy trì nếu có thể.

Ý tưởng của tôi:

Tôi muốn để có thể theo dõi/kiểm tra phiên hoặc FormsAuthentication thời gian còn lại trước khi hết hạn xảy ra HOẶC để được thông báo nếu những giá trị đã được reseted. Bằng cách đó tôi có thể có dữ liệu ban đầu trên máy khách về thời điểm khi tôi hiển thị cửa sổ phương thức với cảnh báo, và tại thời điểm đó, tôi muốn có thể kiểm tra với máy chủ trước tiên IF thời gian đó là đúng (xấp xỉ) hoặc nếu tôi nên cập nhật dữ liệu javascript của mình trên máy khách và kéo dài thời gian trước khi hiển thị cửa sổ cảnh báo kể từ khi hết hạn phiên đã được cập nhật ... Và điều gì ngăn chặn và lọc yêu cầu của người dùng? Điều đó có giúp được gì không?

Trả lời

0

Trước hết, cảm ơn tất cả vì những đề xuất của bạn. Tôi đã xoay sở để giải quyết vấn đề này tuần trước, chỉ cần không có thời gian để đăng bài trước ... và thẳng thắn, tôi đã quan tâm đến các giải pháp khác. Tôi chắc chắn sẽ đọc tất cả tài liệu bạn đã đăng và đề xuất. Cảm ơn vì điều đó.

Dưới đây là những gì tôi đã làm:

Về phía server:

tôi sử dụng cookie để theo dõi thời gian hết hạn phiên. Một điều khiến tâm trí tôi trượt đi là Trang trải qua toàn bộ vòng đời của nó ngay cả trên các yêu cầu không đồng bộ. Toàn bộ ý tưởng là sử dụng sự kiện Pre_Render của Trang chủ để đặt cookie thích hợp theo yêu cầu EVERY.

Tôi đã sử dụng định dạng thời gian UTC và được tính mili giây mà có khả năng dịch để javascript định dạng thời gian:

var tmpDate = new DateTime(1970, 1, 1); 
var nowUtc = DateTime.UtcNow; 
var tmpSpan = new TimeSpan(nowUtc.Ticks - tmpDate.Ticks); 
return tmpSpan.TotalMilliseconds; 

Với điều này, tôi đã có tất cả những gì cần thiết cho tính toán của tôi, thời điểm hiện tại, phiên hết hạn (Session.Timeout) thời gian, và thời gian để cảnh báo ... toán cơ bản từ đó.

Về phía khách hàng:

Trước tiên, tôi đỏ cả ba cookie để bắt đầu theo dõi và khởi tạo hai biến riêng để theo dõi thời gian máy chủ hiện tại. Cả hai đều được khởi tạo cùng một giá trị của cookie đầu tiên được đọc của thời gian máy chủ hiện tại. Sau đó, tôi đã sử dụng chức năng setTimeout để đọc cookie (thời gian máy chủ hiện tại) mỗi giây (plugin jQuery). Tôi đã kiểm tra xem thời gian máy chủ hiện tại từ trước đây là thời gian đọc cookie và máy chủ hiện tại từ mới nhất đọc cookie bằng nhau hay không. cookie cho thời gian cảnh báo và thời gian chờ để cập nhật mọi thứ và đóng hộp thoại cảnh báo nếu nó được mở. Sau đó tôi sẽ làm cho các biến thời gian máy chủ hiện tại bằng nhau và tiếp tục so sánh chúng sau mỗi cookie đọc và cập nhật chỉ một trong số chúng. Ngoài ra, trên mỗi cuộc gọi setTimeout Tôi nhận được thời gian hiện tại với

new Date().getTime(); 

trả về thời gian tính theo giờ UTC hiện đo trên máy client. Trong mọi trường hợp, chúng tôi dựa vào giả định rằng khách hàng đã thiết lập đồng hồ hợp lệ trên máy của họ. Sau đó tôi so sánh thời gian hiện tại với thời gian cảnh báo và nếu thời gian hiện tại là "lớn hơn" thời gian cảnh báo và "nhỏ hơn" thời gian chờ, sau đó chúng tôi phải hiển thị cửa sổ bật lên. Nếu thời gian hiện tại là "lớn hơn" thời gian chờ, hãy nhấp vào nút ẩn gọi phương thức trong mã trang chủ đằng sau người dùng đăng xuất đó. Điều này làm việc tuyệt vời ngay cả khi người dùng có nhiều tab đang mở trong trình duyệt. Khi người dùng đăng xuất trong một tab, mỗi trang (tab) khác cũng cố gắng đăng xuất anh ta, được chuyển hướng đến trang đăng nhập. Nếu người dùng nhấp vào nút OK để xác nhận sự hiện diện của họ, sự kiện trống trong mã trang chủ phía sau được kích hoạt (nhấp vào nút ẩn ẩn). Điều này là đủ để làm mới phiên. Điều này sẽ tự động gửi lại cookie và mọi thứ diễn ra như dự định. (cho rằng bạn có phiên trượt). Thật dễ dàng để thực hiện hẹn giờ trong cửa sổ cảnh báo. Tôi đã tự động tạo div cho cửa sổ phương thức với thông điệp và 3 nhịp.Trên mỗi iteration setTimeout tôi đã thiết lập bộ đếm thời gian như thế này:

  1. Tính Giờ, Phút, Giây theo thời javascript hiện
  2. kết quả địa điểm trong biến
  3. Nếu kết quả là nhỏ hơn 10 thì thêm vào trước 0 (zero)
  4. Target khoảng thích hợp bằng lớp (đã có vấn đề với ID trong IE 8, sử dụng các lớp học duy nhất) và thiết lập thuộc tính văn bản của nó với giá trị tính $ (obj) .text (calculatedValue)

Để kết thúc

Hãy chắc chắn rằng, khi bạn đang đọc cookie để phân tích chúng dưới dạng phao, chỉ để chắc chắn. Tôi quan tâm để xem ứng dụng công nghệ đẩy máy chủ và cách sử dụng ổ cắm web trong trường hợp cụ thể này nhưng tôi nghĩ rằng nó sẽ là quá mức cần thiết nếu bạn theo dõi và tính toán hết hạn phiên trên máy chủ cho mọi khách hàng. Tôi biết rằng tôi đã yêu cầu theo dõi hết hạn phiên trên máy chủ và điều này trông giống như theo dõi trên máy khách, nhưng không phải ... những cookie đó là tất cả những gì chúng tôi cần để theo dõi và chúng đến từ máy chủ ... nó.

0

Bạn đã xem trạng thái phiên qua SQL Server chưa? Nó cho phép bạn quản lý các phiên thông qua cơ sở dữ liệu, mở ra tùy chọn để truy vấn thông tin hết hạn mà bạn mong muốn. Hãy xem trang này link. Hoặc điều này link.

+0

Cảm ơn bạn đã đề xuất của bạn, thật không may, tôi không thể làm điều đó trong giai đoạn phát triển dự án này ... Tôi sẽ xem xét các liên kết bạn đã đăng mặc dù. –

0

Triển khai IHttpModule, đính kèm vào các sự kiện HttpApplication thích hợp và thực hiện những gì bạn muốn.

0

Mặc dù nó không thực hiện chính xác những gì bạn đang yêu cầu, có lẽ điều này Timeout control ít nhất có thể cung cấp một số nguồn cảm hứng?

* Cập nhật: Có một số nhận xét về số blog từ một người thực hiện kiểm soát với thời hạn hết hạn trượt và cách anh ấy làm cho nó hoạt động.

+0

Mặc dù tôi đã giải quyết được vấn đề của mình, tôi sẽ xem xét kỹ những gì anh ấy đã làm. Cảm ơn. –

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