tôi sử dụng một số Javascript trong MasterPage của tôi để chuyển hướng người dùng (sau khi một dấu nhắc để làm mới phiên) với hành động logout. Nó sử dụng một yêu cầu AJAX trở lại trang chủ của ứng dụng để làm mới cửa sổ phiên phía máy chủ khi người dùng nhấp vào nút trong hộp thoại để mở rộng phiên. Phụ thuộc vào jQuery và jQuery UI cho hộp thoại.
<% if (this.Request.IsAuthenticated)
{
int sessionDialogWait = 2 * 60 * 1000 - 60 * 500; // ms = 1.5 minutes
int sessionTimeout = 28 * 60 * 1000; // ms = 28 minutes
if (ViewData["sessionTimeout"] != null)
{
sessionTimeout = ((int)ViewData["sessionTimeout"] * 60 - 120) * 1000;
}
%>
<script type="text/javascript">
var logoutTimer = null;
var sessionTimer = null;
var sessionTimeout = Number('<%= sessionTimeout %>');
var sessionDialogWait = Number('<%= sessionDialogWait %>');
$(document).ready(function() {
$('#sessionEndDialog').dialog({
autoOpen: false,
bgiframe: true,
modal: true,
buttons: {
OK: function() {
$(this).dialog('close');
$.get('<%= Url.Action("About", "Home") %>', scheduleSessionPrompt, 'html');
},
Logout: logoutOnSessionExpires
}
}).ajaxStart(function() { scheduleSessionPrompt(); });
scheduleSessionPrompt();
});
function scheduleSessionPrompt()
{
if (logoutTimer) clearTimeout(logoutTimer);
if (sessionTimer) clearTimeout(sessionTimer);
sessionTimer = setTimeout(sessionExpiring, sessionTimeout );
}
function sessionExpiring()
{
logoutTimer = setTimeout(logoutOnSessionExpires, sessionDialogWait);
$('#sessionEndDialog').dialog('open');
}
function logoutOnSessionExpires()
{
window.location.href = '<%= Url.Action("Logout", "Account") %>';
}
</script>
<% } %>
<div id="sessionEndDialog" title="Session Expiring" style="display: none;">
<p>Your session is about to expire. Click OK to renew your session or Logout to logout of the application.</p>
</div>
Phiên có thể trong Global.asax được sử dụng để làm điều này không? –
Tôi không thấy cách bạn sẽ chuyển hướng trình duyệt đến một trang khác từ sự kiện Session_End trừ khi trình duyệt được kiểm tra định kỳ để xem phiên đó có còn hoạt động hay không. Thật không may, có trình duyệt làm điều này sẽ giả tạo giữ cho phiên còn sống vì nó sẽ được cập nhật trên mọi truy vấn. Tôi đang làm việc để biến điều này thành một plugin jQuery. – tvanfosson
Sửa lỗi nếu tôi sai nhưng Session_End chạy trong chuỗi nền và vì vậy không thể giao tiếp với người dùng. yêu thích công việc của bạn tvanfosson, cách tiếp cận của bạn hoạt động rất tốt – CodeKiwi