icon share facebookicon share facebook

Giải pháp khắc phục lỗi session timeout trong ASP.NET

Thứ ba, 2016-26-4 9:06:27 GM+7
Lỗi session timeout là lỗi phổ biến nhất khi thiết kế website bằng công nghệ dotNet. Bài viết này ACTechz xin hướng dẫn giải pháp khắc phục lỗi này nhanh chóng và đơn giản.
Thông thường khi chúng ta để trang nhập liệu quá lâu nhưng không thao tác, và khi chúng ta nhấn vào button submit sẽ thấy xuất hiện lỗi “Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> …” đây chính là lỗi Session Timeout – một lỗi thường gặp trong thiết kế website bằng công nghệ dotNet. Vậy giải quyết vấn đề này như thế nào? Bạn có thể coppy lỗi trên và hỏi bác Gu-gồ, nhưng các câu trả lời là rất chung chung. Vì thế trong bài viết này, ACTechz sẽ hướng dẫn một giải pháp vô cùng hiệu quả cho vấn đề Session Timeout trong ASP.NET.
 
giải pháp xử lý lỗi session timeout trong asp.net 1

Session Timeout là gì?

Được biết như 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 bị hủy. Ví dụ: giả sử giá trị timeout này = 20 thì cứ trong 20 phút, nếu user không gửi bất kỳ 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, giá trị mặc định của session timeout là 20 phút. Có nhiều cách để thay đổi giá trị này, nhưng cách đơn giản nhất là thêm một dòng vào web.config như sau:
<sessionState timeout="30"></sessionState> (trong đó: 30 là giá trị session timeout.)

b. Đặt giá trị session timeout bao nhiêu là hợp lý?

Mặc dù giá trị mặc định (20 phút) là khá lớn nhưng 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 và bạn không muốn session kết thức trước khi người dùng soạn xong nội dung văn bản. Hay một ví dụ khác là trang nhập dữ liệu ở phần quản trị website, nếu session bị hết trước khi bạn soạn xong dữ liệu thì khi bạn submit website sẽ báo lỗi, khi đó bạn chỉ còn cách bắt try catch và nhập liệu lại từ đầu, điều này rất phiền phức…
 
Vậy, bạn sẽ thiết lập timeout bằng một số rất lớn? Ồ không bạn ạ, điều này thật sự không ổn chút nào. Vì giá trị timeout quá lớn sẽ tốn rất nhiều bộ nhớ của server dành cho session của người dùng truy cập, mặc dù những người dùng này không còn trên website của bạn.
 
giải pháp xử lý lỗi session timeout trong asp.net 2
Website báo lỗi khi hết session. Photo by ACTechz.

c. Giải pháp Heart Beat Pattern

Giá trị timeout quá thấp hay quá cao đều không tốt. Vì thế, cách giải quyết tốt nhất là sử dụng giải pháp Heart Beat Pattern. Đây là giải pháp thiết lập giá trị session timeout nhỏ, nhưng đồng thời phía client sẽ “âm thầm” gửi những request nhỏ liên tục đến server, việc làm này nhằm mục đích báo cho server biết rằng session 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.

ACTechz thực hiện theo các bước sau:

Bước 1: Thiết lập một giá trị nhỏ cho Session Timeout (giả sử là 5 phút).
<sessionState timeout="5"></sessionState>
 
Bước 2: Tạo trang KeepAlive.ashx để nhận request thường xuyên từ client. Trang này không cần làm gì cả.
 
Bước 3: Thêm đoạn javascript sau vào trang bạn muốn giữ session. Tốt nhất là đặt chúng trong các trang sử dụng chung như: master page, config,…
 
function heartBeat() {
    $.get("KeepAlive.ashx?", function (data) {});
}
$(function () {
    setInterval("heartBeat()", 1000 * 30); // 30s gửi request một lần
});
 
* Lưu ý: Để thực thi đoạn javascript trên cần includes thư viện jquery trước.
 
Như vậy là ACTechz vừa hoàn thành giải pháp session timeout trên ASP.NET, nếu bạn gặp khó khăn cần được trợ giúp hãy gửi thư về actechzcompany@gmail.com. Chúc các bạn thành công.
 
ACTechz t/h.
 
Minh Chiến

Minh Chiến

ACTechz's Dev. Đam mê công nghệ, làm web, thiết kế và cả nhiếp ảnh nữa.

Có thể bạn quan tâm

Bài viết nổi bật

Bạn đã sẵn sàng để đưa việc kinh doanh lên internet?

Chúng tôi luôn sẵn sàng trở thành đối tác đáng tin cậy.

Khách hàng VIP trên hệ thống ACTechz

  • An Chi Phương giấy phép vệ sinh an toàn thực phẩm
  • Quà tặng Sao Việt
Bản quyền của ACTechz © 2016. Bảo lưu mọi quyền. Ghi rõ nguồn 'actechz.com' khi sử dụng lại thông tin từ website này.
iconiconicon
Chia sẻ lên mạng xã hội