在IIS中,选择默认网站>属性>主目录>应用程序设置>配置>选项,默认会话超时为20分钟.此外,选择应用程序池> DefaultAppPool>属性,在性能选项卡中,有空闲超时,默认为20分钟.这两次超时有什么不同?
我编写了一个HTML 5应用程序,它使用AngularJS并与在Tomcat上运行的Java REST后端接口.我使用Spring Security来处理登录和安全性.
当用户进入网站时,他被转发到登录页面,该登录页面创建会话并重定向到索引页面.REST调用从服务器加载更多数据,然后使用该会话进行身份验证.如果没有会话,我将回退到基于HTTP的基本身份验证,这样就可以从Web应用程序中单独调用REST端点.
我现在遇到的问题是会话到期时.这会导致HTTP 401 Unauthenticated服务器响应.我以为我可以捕获该错误并使用Javascript将用户重定向回登录页面.但是在调用我的错误处理程序之前,浏览器首先显示一个登录窗口,只有当我单击取消时我的Javascript错误处理程序才能处理响应.
我的问题是,有没有办法阻止浏览器显示此登录窗口?或者这是我的应用程序设计的一般问题?
替代方案可能是根本不使用会话并在应用程序中缓存用户名和密码.然后我需要使用基本身份验证发送每个REST调用,这是一个更好的方法吗?
以下是来自服务器的HTTP响应:
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="Spring Security Application"
Content-Type: text/html;charset=utf-8
Content-Length: 999
Date: Mon, 30 Sep 2013 11:00:34 GMT
Run Code Online (Sandbox Code Playgroud)
更新:看起来原因是WWW-Authenticate标题,导致浏览器显示登录对话框.
在运行我的测试时,我需要长时间延迟(约40秒).
而且我看到,Selenium会话在此期间被删除了.
请帮忙:如何配置会话超时增加?
这是我在Selenium节点日志中开始延迟后30秒内看到的内容:
INFO org.openqa.selenium.remote.server.DriverServlet - 会话7f5fffec-4882-4c4c-b091-c780c66d379d由于客户端超时而被删除
睡眠40秒后,我的代码中出现此异常:
org.openqa.selenium.remote.SessionNotFoundException
我试图增加所有可能的超时.以下是我启动集线器的方法:
java -jar selenium-server-standalone.jar -role hub
-hubConfig selenium_hub.json
-nodeTimeout 61
-remoteControlPollingIntervalInSeconds 180
-sessionMaxIdleTimeInSeconds 240
-newSessionMaxWaitTimeInSeconds 250
-timeout 59
Run Code Online (Sandbox Code Playgroud)
这里是selenium_hub.json:
{
"host": null,
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets": [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 60000,
"browserTimeout": 60000,
"maxSession": 5,
"jettyMaxThreads": -1
}
Run Code Online (Sandbox Code Playgroud)
没有在节点上配置任何超时.这是我在网格控制台中看到的内容:
browserTimeout : 60000
capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher
cleanUpCycle : 5000
host : null
hubConfig : /usr/local/selenium/config/selenium_hub.json
jettyMaxThreads : -1
maxSession : 5
newSessionMaxWaitTimeInSeconds …Run Code Online (Sandbox Code Playgroud) 一直在拉我的头发试图找出为什么我的会议在30分钟被终止/杀死/摧毁.好吧,看起来基于Debian的系统有一个特殊的cron运行,忽略了所有的php.ini和apache配置,并在30分钟时杀死任何空闲会话.
cron路径: /etc/cron.d/php5
在cron里面:
# /etc/cron.d/php5: crontab fragment for php5
# This purges session files older than X, where X is defined in seconds
# as the largest value of session.gc_maxlifetime from all your php.ini
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs …Run Code Online (Sandbox Code Playgroud) 在Zend Framework或PHP中有没有办法让时间到会话(PHPSESSID cookie)到期?
Web应用程序调用存储过程以执行密集数据库更新.相关部分web.xml更新为四小时:
<session-config>
<session-timeout>240</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
可用于该解决方案的技术包括Java 1.4.2,Struts 2,Tomcat 5.5和Apache commons.大多数其他技术(例如jQuery)是不允许的.
更新大约需要一个小时才能运行,但配置值为四小时是违反企业标准的(出于好的理由).生产中不允许四小时超时配置.
在数据库更新执行时,什么将确保请求不会超时?
我在前两种情况下的担心是,生成的进程最终将被Servlet容器杀死.
类似于在JSF中长时间处理期间防止会话超时,但没有jQuery.
编写一个侦听请求的简单服务器:
由于服务器独立于Tomcat运行,因此不会发生会话超时.数据库更新将运行完成而不会被终止.这有很多问题(错误处理不是我最关心的问题),并且可能是最后的选择.
优化查询以在30分钟内完成(最大允许超时)是可能的,但很可能无法充分优化查询.
不幸的是,升级数据库硬件不是一种选择.
非常感谢!
出于安全考虑,我将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为true.
但是,浏览器长度的cookie(一旦用户关闭他或她的浏览器就会过期的cookie)没有过期时间,那么SESSION_COOKIE_AGE没有效果(是的,我检查它).但我想在不活动时设置注销/超时加上注销浏览结束.
我的问题是,在浏览器长度的cookie场景中实现非活动超时/注销的最佳方法是什么?
对于不在表面上的Rails部分,我不是很有经验.
我想要的是拥有一个会话cookie,该会话cookie的到期时间设置为session当用户离开浏览器或其他任何内容时到期.作为安全措施.
我希望显示<p:growl>会话已过期.我找到了许多处理会话过期的方法,如会话超时和JSF/PrimeFaces ajax请求上的ViewExpiredException处理,但是我无法将faces消息推送到<p:growl>.
到目前为止,当HTTP会话在服务器端自动过期时,如何在客户端自动运行一些(JavaScript)代码?
场景是用户应该在她的会话即将到期时收到通知(例如通过典型的JS警报或重定向等).可以做的几种方法是
这两种方法的相对优点/缺点是什么?除了这些,还有其他方法可以实现(一些标准库等).我的后端是Java EE(Struts + Spring).