Session timeout Là khoảng thời gian lớn nhất có thể giữa hai lần user
request lên server mà session của user chưa bị hủy. Vấn đề thường gặp là
Session hay bị mất khi đang xử lý thông tin trước khi Submit form. Bài
viết này xin giới thiệu một giải pháp cho vấn đề session timeout trong
asp.net
1. Session timeout là gì?
Là khoảng thời gian lớn nhất có thể giữa hai lần user request lên
server mà session của user chưa bị hủy. Nói một cách đơn giản hơn, giả
sử giá trị timeout này là 30′, thì cứ trong 30′, nếu user không gửi một
request nào lên server thì session của user đó sẽ không còn hiệu lực.
Trong ASP.NET, session timeout mặc định là 20′. Có nhiều cách để thay
đổi giá trị này, đơn giản nhất là thêm một dòng trong web.config< sessionState timeout = "30" ></ sessionState > |
2. Đặt timeout bao nhiêu là hợp lý?
Giá trị mặc định của nó là 20′, tuy nhiên trong một số trường hợp bạn
muốn session tồn tại lâu hơn. Ví dụ một ứng dụng web cho phép người dùng
soạn thảo nội dung trực tiếp trên trình duyệt. Bạn không muốn session
kết thúc trước khi người dùng soạn thảo xong văn bản, vì thế bạn thiết
lập timeout bằng một số rất lớn. Điều này không thực sự ổn vì nó sẽ tốn
rất nhiều bộ nhớ của server dành cho session của những người dùng không
còn trên website của bạn.
3. Heart beat pattern
Có một giải pháp cho vấn đề này: Thiết lập một giá trị session timeout
nhỏ. Đồng thời, phía client sẽ “âm thầm” gửi các request nhỏ, thường
xuyên đến server để báo cho server biết nó vẫn còn “sống”. Do đó bạn sẽ
không bị tốn bộ nhớ một cách vô ích cho session của những người dùng
không còn trên trang. Phương pháp này được biết dưới cái tên Heartbeat
design pattern.
Tôi thực hiện điều này trong ASP.NET một cách đơn giản như sau:
+ Thiết lập một giá trị nhỏ cho session timeout (giả sử là 5′)
Tôi thực hiện điều này trong ASP.NET một cách đơn giản như sau:
+ Thiết lập một giá trị nhỏ cho session timeout (giả sử là 5′)
< sessionState timeout = "5" ></ sessionState > |
+ Thêm đoạn code javascript sau vào trang bạn muốn thực hiện. Tốt nhất là đặt chúng trong các trang master page
function heartBeat() { $.get( "KeepAlive.ashx?" , function (data) {}); } $( function () { setInterval( "heartBeat()" , 1000 * 30); // 30s gửi request một lần }); |