许多站点(例如银行网站)- 在 session 即将过期前实现注销 + 1 分钟警告。(20 分钟)
(这个主题没有太多讨论 - 我看到的唯一问题是使用 asp.net 成员资格 - 我不使用它)
每个用户都会有一个session["lastActionTime"]
此 session 将在以下时间更新到当前时间:
现在 - 当页面加载时,我设置 session 值。 (比方说 19:00)
此外,对于每个 ajax 请求(我的站点不创建回发 - 仅 ajax jquery)- 我使用带有 IRequiresSessionState 的 ASHX 处理程序将 session 更新为当前时间。
我用的是这样的:
jQuery(document).ajaxStart(function(){
gotoHandlerAndUpdateSessionTime();
})
现在 - 警告消息(“您的 session 即将到期”)前 1 分钟的部分:
每个 ajax 返回事件或 页面加载 事件 - 我在 javascript 中激活:setInterval 和 [sessionTime-1]分钟(20-1=19)。 (当然 - 取消所有 prev setIntervals...)
现在事件 (setInterval) 发生时 - 到期时间前 1 分钟:(19 分钟)
我显示一个警告 div ,用户可以选择 exit 或 stay 。
问题:
1) 如果用户在警告 div 上什么也没按怎么办,我如何(显示 div 1 分钟后)将他注销?我是否应该在显示 div 时打开 1 分钟的 setTimeout 然后(如果没有按下)注销他?
2) 这是正确的做法吗?
3) 在这整个奇怪的故事中不应该有 cookies 吗? :-)
(请 - 无成员(member)资格 - 或表单例份验证)。 我也将这个问题标记为 PHP,因为我知道它也与 php 程序员相关,我想听听他们的知识。
最佳答案
Royi,为了回答你的两个问题,我会说是。我已经多次构建这些(通常使用 Forms Auth),但基本上您有一个倒计时以显示第一个警告的计时器,然后是另一个倒计时并给用户 X 秒来回答的计时器。我通常会在警告消息上倒计时 X 秒,这样他们就可以看到还剩多少时间。如果他们没有在规定的时间内回答,则会调用 Logout.ashx(或其他)来破坏 session ,然后 javascript 可以将他们重定向回登录页面。希望对您有所帮助。
关于您的第三个问题,只要您正在跟踪 session ,您就不需要 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';
}
关于c# - 在 asp.net + jquery 中实现自动注销 + 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12695747/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我需要在RubyonRails中实现无向图G=(V,E)并考虑构建一个Vertex和一个Edge模型,其中Vertex有_多条边。由于边恰好连接两个顶点,您将如何在Rails中执行此操作?您是否知道任何有助于实现此类图表的gem或库(对重新发明轮子不感兴趣;-))? 最佳答案 不知道有任何现有库在ActiveRecord之上提供图形逻辑。您可能必须实现自己的Vertex、EdgeActiveRecord支持的模型(请参阅Rails安装的rails/activerecord中的vertex.rb和edge.rb/test/fixtur