当你使用一个系统时,如果长时间不操作就会出现超时现象,如果你正在编辑一个文档,这时你修改的内容可能就白费了哦。
怎么办?让你的会话不超时呗。
解决超时问题有如下方法:
1 将你的服务器的超时时间设置得很长,这显然增加了服务器的负担(让会话永不超时更是不可取的方式)
2 使用iframe定期向服务器发送请求,自动延长超时时间.(当然这个iframe是隐藏的)
3 使用ajax程序代替iframe定期向服务器发送请求,自动延长超时时间。
感觉用ajax的方式实现起来比iframe更加正规灵活。写了个程序,这次还是整合到了dojo中了
先看一下js文件:
//创建一个session激活类
dojo.provide("dojo.noSessionTimeOut.SessionInvoker");
dojo.noSessionTimeOut.SessionInvoker =function(){
}
//定义定期激活session方法
dojo.noSessionTimeOut.SessionInvoker.prototype.invoke=function(){
dojo.io.bind({
url: window.contextPath+"/servlet/InvokeSession",
mimetype: "text/json",
timeoutSeconds: 3000,
method: "POST",
content: {},
load: function(type, data, evt) {
},
error: function(type, error) { alert(error.message); },
timeout: function(type) { }
});
}
//这是定义服务器端代码,简单的访问session对象,以保持连接
public class InvokeSession extends HttpServlet {
private static Logger logger = Logger.getLogger(InvokeSession.class);
/**
* Constructor of the object.
*/
public InvokeSession() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.info("激活session开始");
request.getSession().getCreationTime();
logger.info("激活session结束");
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
}
在jsp 页面上定期调用这个对象的触发函数,需要注意的是,触发函数的定期运行时间要小于session的超时时间,我设的是10分钟^_^
<script type="text/javascript">
//这里是将contextPath设置到客户端,以方便获取资源
window.contextPath="<%=request.getContextPath()%>";
</script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/dojo040/dojo.js"></script>
<script type="text/javascript">
//导入会话激活包
dojo.require("dojo.noSessionTimeOut.*");
//创建会话激活对象
var invoker=new dojo.noSessionTimeOut.SessionInvoker();
//这里是指定在页面加载完毕后需要执行的脚本
dojo.addOnLoad(function(){
//这里定期进行激活对象激活函数的调用
window.setInterval(invoker.invoke,10*1000*60);
});
</script>
分享到:
相关推荐
如果匹配,就设置一个名为`login`的session属性为`ok`,并设置session的超时时间为-1,这意味着直到服务器关闭,session都不会过期。然后使用`jsp:forward`标签将页面转发到`main.jsp`。如果不匹配,就显示错误信息...
但是,在某些特殊应用场景下,可能会需要让session永不过期,比如内部系统或者客服支持系统。本文将详细介绍如何通过修改PHP配置或代码来实现session永不过期的需求。 ### 解决思路及实现方法 #### 方法一:修改...
4. 告别“连接超时,请重试”时代。登录页面不在依赖于邮箱服务。 5. 智能判断故障,在线故障申告,自动重连系统。 6. 内页全面简化结构,大方高效,更适合商业用户。代码开源更利于二次修改。 7. 对以往诸不方便的...
如果设置为0或负数,表示会话永不超时。对于特定Web应用的会话超时,可以单独在应用的`web.xml`文件中调整。 此外,程序员也可以通过调用`HttpSession`的`invalidate()`方法手动结束会话,这在用户登出或特定条件下...
Android 中如何禁止屏幕休眠和锁屏 Android 中禁止屏幕休眠和锁屏是一种常见的需求,特别是在开发一些需要长时间运行的程序时,例如 NowTV 或 XXX 播放器等。这些程序需要长时间保持屏幕常亮,以便用户可以无间断地...
设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。 nio:JDK1.4 开始支持,同步阻塞或同步非阻塞 IO。 指定使用 NIO 模型来接受 HTTP 请求 protocol=”org.apache.coyote....
- `xhr.timeout`: 设置请求超时时间(毫秒),默认为0,表示永不超时。 - `xhr.abort()`: 取消当前请求。 - `xhr.getAllResponseHeaders()`: 获取所有响应头。 - `xhr.getResponseHeader(header)`: 获取指定的响应头...
- 设置>声音与显示>屏幕超时:设置为“永不超时”。 4. **修改startcts脚本**: 进入到`android/out/host/Linux-x86/cts/android-cts/tools`目录,编辑`startcts`脚本,将`SDK_ROOT`和`CTS_ROOT`变量更改为对应的...
- `timeout`: 客户端无操作后的超时时间(秒),默认为0,表示永不超时。 - `daemonize`: 是否以后台守护进程方式运行,默认为no。 2. **日志与监控**: - `loglevel`: 日志级别,可选debug、verbose、notice、...
- `<expiration-cache>`:设置内容过期时间,值为0表示永不超时,-1表示由容器决定。 - `<supports>`:定义portlet支持的MIME类型和portlet模式,如`edit_guest`、`config`等。 - `<resource-bundle>`:当需要多...
- `getMaxInactiveInterval()`:获取Session的超时时间(以秒为单位),负值表示永不过期。 - `getAttribute(String name)`:获取与给定键关联的Session属性值。 - `setAttribute(String name, Object value)`:设置...
通常,这样的循环会在用户界面中显示无限加载的图标,或者页面内容无法更新。 现在,让我们深入探讨死循环的相关知识点: 1. 循环结构:在编程中,循环结构如for、while、do...while等,用于重复执行一段代码,...
然后,当客户继续访问服务器上的其他资源时,服务器不再为该客户分配新的 Session 对象,直到客户端浏览器关闭、超时或调用 Session 的 invalidate() 方法使其失效,客户端与服务器的会话结束。 Session 对象主要...
程序会创建线程执行ActiveRequest方法,该方法创建一个HttpWebRequest对象,并设置其Timeout为int.MaxValue,表示请求永不超时,同时保持连接(request.KeepAlive = true)。每个线程都会向default.aspx发送请求,...
其次,在登录处理的handler中,应当将session对象保存到application中,这样即使用户的会话已经超时,通过session ID依然可以在application中找到对应的session对象,进行检查。最后,当检测到session已过期时,通过...
1. **设置热点数据永不超时** - 实现方法:对于那些访问频率极高的数据,可以设置其缓存时间为永久,避免因缓存过期而导致的数据库压力增大。 2. **使用互斥锁** - 实现方法:当检测到缓存项已失效时,可以先尝试...
- **3.1.4SystemTimeout系统超时**:设定系统无操作后自动关闭屏幕的时间。 - **3.1.5Conf.Page确认页**:显示确认页面的开关选项。 - **3.1.6AltitudeAdj.调高度**:根据海拔高度进行相应的调整。 - **3.1.7...