- 浏览: 189853 次
- 性别:
- 来自: 上海
文章分类
最新评论
文章出处:http://blog.csdn.net/zuxianghuang/article/details/7270489
项目使用的是spring-security安全框架,当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面。但是ajax请求就会有问题。session超时的时候,点击到ajax请求就会弹出一些页面源码文件。
由于一直都在忙其他的这个问题一直放着。最近有时间了,就把这个问题给解决了。
首先建了个拦截器,来判断session超时。用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时。(我总觉得这种方法不怎么好。不知还有什么更好的办法。)
拦截器是spring-mvc的拦截器,在拦截器里判断是不是ajax请求:
[java] view plaincopy public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
if (request.getSession().getAttribute("user") == null)//判断session里是否有用户信息
{
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with;
{
response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
return false;
}
}
return true;
}
这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;
再用一个全局的方法来处理,session超时要跳转的页面。
jquery 可以用$.ajaxSetup 方法,ext也有类似的方法
[javascript] view plaincopy //全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=="timeout"){
//如果超时就处理 ,指定要跳转的页面
window.location.replace("${path}/common/login.do");
}
}
}
});
项目使用的是spring-security安全框架,当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面。但是ajax请求就会有问题。session超时的时候,点击到ajax请求就会弹出一些页面源码文件。
由于一直都在忙其他的这个问题一直放着。最近有时间了,就把这个问题给解决了。
首先建了个拦截器,来判断session超时。用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时。(我总觉得这种方法不怎么好。不知还有什么更好的办法。)
拦截器是spring-mvc的拦截器,在拦截器里判断是不是ajax请求:
[java] view plaincopy public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
if (request.getSession().getAttribute("user") == null)//判断session里是否有用户信息
{
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with;
{
response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
return false;
}
}
return true;
}
这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;
再用一个全局的方法来处理,session超时要跳转的页面。
jquery 可以用$.ajaxSetup 方法,ext也有类似的方法
[javascript] view plaincopy //全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=="timeout"){
//如果超时就处理 ,指定要跳转的页面
window.location.replace("${path}/common/login.do");
}
}
}
});
发表评论
文章已被作者锁定,不允许评论。
-
Bootstrap
2016-03-24 12:22 437http://expo.bootcss.com/ Boot ... -
js中undefined,null,NaN的区别
2015-04-21 11:43 554typeof 返回字符串,有六种可能:"number ... -
jsp自定义标签
2015-04-17 11:06 420自定义标签库并不是 JSP 2 才出现的,JSP 1.1 版中 ... -
get post 误区
2015-04-10 10:52 477众所周知的http请求有两种: get与post: 这两种 ... -
跨域请求
2014-12-19 14:42 615设域名是:http://www.example.com/ 如果 ... -
关于url 编码
2014-12-17 16:35 375一、问题: ... -
SiteMesh框架
2014-04-30 15:34 532SiteMesh框架是OpenSymphony团队开发的一个非 ... -
判断request来自Ajax请求(异步)还是传统请求(同步)
2014-04-08 11:55 858在服务器端判断request来自Ajax请求(异步)还是传统请 ... -
获取所有类型浏览器的高度和宽度
2014-04-03 10:27 733var w=window.innerWidth || docu ... -
正则表达式 语法
2014-03-26 15:39 498/^\s*$/ 匹配空行。 /\d{2}-\d{5}/ ... -
js cookie
2013-09-21 17:34 495在上一节,曾经利用一个不变的框架来存储购物栏数据,而商品显示页 ... -
form/input autocomplete="off"属性(转)
2013-09-17 15:31 1093有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息 ... -
js关于中文的判断
2013-09-16 15:20 534<script language="javas ... -
设置浏览器不缓存
2013-09-09 16:41 464为了指示IE浏览器(客户端)不要缓存页面,服务器端的程序可以编 ... -
js setTimeout(转转转)
2013-09-06 17:14 674settimeout(表达式,延迟时 ... -
freemarker if else 及其获得下标值
2013-08-29 12:27 866<#if x = 1> x is 1 < ... -
<a href='javascript:function()'>
2013-08-20 16:29 939<a href='javascript:function ... -
freemarker操作字符串(很常用)
2013-08-08 17:12 12211、substring(start,end)从一个字符串中截取 ... -
session基础学习
2013-08-07 16:56 5211:理解Session的概念 运行机制: 当一个Session ... -
session失效情况
2013-08-07 16:42 418session死亡发生在以下情况: 1.session的持有 ...
相关推荐
Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不
总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...
- `demo2`可能是对`demo1`的扩展,增加了CORS配置,允许跨域的Ajax请求访问服务端资源。 总结,通过Spring Boot结合Redis,我们可以实现高效的分布式Session共享,确保用户会话在多服务器环境下的一致性。同时,...
总结来说,处理AJAX请求时的Session超时问题,主要分为两步:一是服务器端检测并标记Session超时,二是客户端监听响应并根据标记进行页面跳转。这种方法可以确保无论用户何时何地发起AJAX请求,一旦Session超时,都...
### JSP Session超时提示知识点解析 #### 一、背景介绍 在Web应用程序中,`session` 是一种常用的技术手段,用于保存用户的状态信息。它能够帮助开发者在多个页面请求之间保持用户的数据一致性。然而,为了提高安全...
后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象
Javaweb项目Session超时解决方案 在Java Web开发中,Session机制为我们提供了许多方便,...解决Javaweb项目Session超时问题需要对所有的/web/请求进行登录拦截,配置Session超时时间,并使用拦截器来处理后端请求。
2. 在前端JavaScript中监听Ajax请求的响应,根据响应头判断Session是否超时并做出相应处理。 这种做法确保了无论是常规请求还是Ajax请求,当Session失效时都能正确地通知用户并引导他们重新登录,从而保持应用的...
总结来说,实现Webix+Spring MVC环境下Session超时跳转登录页面的关键在于,前端扩展Webix的Ajax请求处理,添加对Session超时的检查,并在检测到超时后使用JavaScript进行页面重定向;后端则需在Spring MVC的拦截器...
当心跳请求到达服务器时,服务器会检查session是否超时,若超时则清除session中的用户信息。 4. **关闭浏览器处理**:由于浏览器关闭时不会主动发送任何请求,服务器无法直接感知。通常需要在前端设置事件监听器,...
设置session超时时间是为了防止恶意用户长时间占用资源,同时也是为了保护用户数据的安全,避免因用户忘记退出而被他人窃取。 **PHP中的Session管理**:在PHP中,可以使用`session_start()`函数开启一个新的会话,`...
由于Session本身是在服务器端管理的,因此,这个库可能通过定时发送Ajax请求到服务器,获取Session信息,然后在客户端处理和展示。 描述中提到的“采用纯js实现,可以动态监测Web网页Session超期的个数”,意味着...
这通常是通过Ajax请求完成的。如果后端返回的响应表明Session已过期,EXT应用可以触发一个事件,该事件负责处理页面的跳转。 实现这个功能,开发者通常会在EXT应用中的某个全局或关键位置(如路由控制器)设置一个...
在全局的Ajax配置中监听`requestcomplete`事件,检查返回的响应,如果发现session超时,则弹出提示并重定向到登录页面: ```javascript // 在app中设置Ajax回调处理函数 Ext.Ajax.on('requestcomplete', ...
2. **JavaScript心跳检测**:客户端可以通过定期发送Ajax请求(心跳检测)来保持Session活动。每当服务器接收到心跳请求时,就会刷新Session的过期时间。这种方法可以避免用户因为长时间无操作而导致Session过期,但...