Roy*_*mir 9 javascript php c# asp.net jquery
许多站点(例如Bank webSite) - 在会话即将到期之前实施注销+ 1分钟警告.(20分钟)
(这个主题没有多少讨论 - 我见过的唯一问题是使用asp.net会员资格 - 我不使用)
每个用户都会有一个 session["lastActionTime"]
此会话将更新到当前时间:
现在 - 当页面加载时,我设置会话值.(比如19:00)
此外,对于每个ajax请求(我的网站不创建回发 - 只有ajax jquery) - 我使用ASHX处理程序,IRequiresSessionState用于将会话更新为当前时间.
我使用这样的东西:
jQuery(document).ajaxStart(function(){
gotoHandlerAndUpdateSessionTime();
})
Run Code Online (Sandbox Code Playgroud)
现在 - 警告信息前1分钟的部分(" 你的会话即将到期 "):
每个Ajax返回事件或page load事件-我激活的javascript:setInterval以[sessionTime-1]分钟(20-1 = 19).(当然 - 取消所有上一个setIntervals ...)
现在当事件(setInterval)发生时 - 它在到期时间前1分钟:( 19分钟)
我显示一个警告div,用户可以选择exit或stay.
题 :
1)如果用户没有在警告div上按任何内容,如何(显示div后1分钟)我会将他记录下来怎么办?我应该在显示div时打开1分钟的setTimeout然后(如果没有按下)将其记录下来?
2)这是正确的做法吗?
3)这整个奇怪的故事不应该有饼干吗?:-)
(请 - 没有会员资格 - 或表格认证).我也将这个问题标记为PHP,因为我知道它也与php程序员有关,我想听听他们的知识.
罗伊,回答你的两个问题,我会说是的.我已经多次构建这些(通常使用Forms Auth),但基本上你有一个计时器倒计时显示第一个警告,然后另一个计时器倒计时并给用户X秒回答.我通常会在警告信息上放下第二次计数,这样他们就可以看到他们还剩下多少时间.如果他们没有在规定的时间内回答,则会调用Logout.ashx(或其他)来销毁会话,然后javascript可以将它们重定向回登录页面.我希望有所帮助.
关于你的第三个问题,只要你跟踪会话,你就不应该真正需要cookie.当javascript计时器倒计时时,只需在PHP中执行session_destroy()或在C#中执行Session.Abandon().
这是我在我的一个网站上使用的一些代码(可能不是最干净的,但你明白了):
var timeoutPolled = 0;
var timeoutSeconds = 10;
var countDownCounter = 61;
var timeoutBetweenPolls = 5000;
var stopCountDown = false;
function InitializePollTimer(timeoutMinutes) {
timeoutSeconds = timeoutMinutes * 60;
StartPollTimer();
}
function StartPollTimer() {
setTimeout(PollForTimeout, timeoutBetweenPolls);
}
function PollForTimeout() {
timeoutPolled++;
if ((timeoutPolled * timeoutBetweenPolls) > 1 * (timeoutSeconds * 1000)) {
$("#timeoutDialog").dialog({
autoOpen: false,
bgiframe: true,
resizable: false,
height: 250,
draggable: false,
modal: true,
zindex: 99999999,
position: 'top',
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
buttons: {
"Continue using Website?": function() {
StopCountDown();
$.ajax({
type: "GET",
url: "RefreshSession.aspx",
cache: false
});
$(this).dialog("close");
timeoutPolled = 0;
StartPollTimer();
},
"Logout": function() {
Logout();
}
}
});
$("#timeoutDialog").dialog("open");
countDownCounter = 61;
CountDown();
}
else {
StartPollTimer();
}
}
function CountDown() {
if (stopCountDown) {
stopCountDown = false;
}
else {
countDownCounter--;
$("#countdownTimer").html(countDownCounter);
if (countDownCounter > 0) {
setTimeout(CountDown, 950);
}
else {
Logout();
}
}
}
function StopCountDown() {
stopCountDown = true;
}
function Logout() {
window.location.href = 'Logout.aspx';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2986 次 |
| 最近记录: |