web设置session超时时间,ajax解决session超时

web设置session超时时间,ajax解决session超时,Javaweb项目session超时解决方案

本文主要介绍Javaweb项目的会话超时解决方案。解决方案分类明确,内容详细。有需要的朋友可以参考一下。

在Java Web开发中,Session给我们提供了很多便利。会话在浏览器和服务器之间维护。超时意味着在浏览器和服务器之间创建会话。因为客户端长时间没有和服务器交互(睡眠时间),服务器会破坏这个会话,当客户端再次和服务器交互时,之前的会话就不存在了。

0.需求

有必要拦截所有/web/**请求,并在会话超时时跳转到登录页面。

1.引入

一般来说,会话超时会在项目使用过程中进行配置。如果未配置,默认值为30分钟,即用户30分钟不操作后,会话将失效,用户需要重新登录系统。

会话超时在主项目的web.xml中配置,如下所示:

span style=' font-size:14px;'!-设置会话超时-

会话配置

!-分钟-

会话超时60/会话超时

!-删除URL上显示的jsessionid,以防止打开选项卡页面时出现JS错误-

跟踪模式cookie/跟踪模式

/session-config/span span style=' font-size:24px;'

/span

2.请求的分类

当前项目中有两种请求:一种是普通请求,即发起请求返回视图和模型;另一个是Ajax请求,主要返回模型数据。后端处理会根据不同的请求返回不同的内容。

对于普通请求,我们直接返回JavaScript脚本,可以跳转页面到登录页面。

对于ajax请求,需要返回200以外的状态码,这样Ajax请求才能进入错误回调函数和全局AJAXError回调函数AjaxError。

3.后端处理Session超时

后端SpringMVC用于拦截器处理。为什么在这里使用拦截器?一方面,请求URL不能限制太多,比如/*,浪费资源过滤所有请求。另一方面,有些网址不需要拦截。比如对登录页面的请求一定不能被拦截,否则会被循环重定向。另一方面,我们只需要拦截控制器请求,其他请求不会被拦截。

让我们来看看拦截器的实现:

/**

* Web端登录拦截器

*处理请求时会话失败,包括Ajax请求和普通请求。

* @ClassName WebLoginInterceptor

* @作者张顺

* @日期2016年10月20日上午11点14分52秒

*/

公共类WebLoginInterceptor扩展HandlerInterceptorAdapter{

/**

*日志对象

*/

private Logger Logger=Logger factory . get Logger(weblogininterceptor . class);

/**

*默认注销URL

*即会话超时后,会向该地址发送一个请求,该请求仅对普通请求有效。

*/

private static final String DEFAULT _ LOGOUT _ URL='/web/LOGOUT ';

/**

*注销URL

*/

私有字符串logoutUrl

@覆盖

公共布尔预处理(HttpServletRequest请求,HttpServletResponse响应,

对象处理程序)引发异常{

user user=session utils . getuserfromrequestacrosscas(请求);

string uri=request . getrequest uri();

if(user==null){

response . set content type(' text/html;charset=UTF-8 ');

if(request . get header(' x-requested-with ')!=空

request . get header(' x-requested-with ')。equalsIgnoreCase(' XMLHttpRequest '){

//Ajax请求,前一段按照这个头处理。

response . set header(' Session time out ','会话超时,您需要重新登录!');

//返回未经验证的状态代码(401)

response.setStatus(HttpStatus。authorized . value());

Logger.debug('请求路径:' uri ',请求方法:Ajax请求,会话超时,再次登录!');

}否则{

//普通请求

string path=request . getcontextpath();

string buffer basePath=new string buffer()。append(request.getScheme())。追加('://')。append(request.getServerName())。追加(':')。append(request.getServerPort())。追加(路径)。追加('/');

string buffer responseStr=new string buffer()。append(' htmlheaderscript type=' text/JavaScript ' ')。append('window.location.href=' ')。追加(基本路径)。append(getLogoutUrl()).追加("");)。append('/script/header/html ');

response.getWriter().写(responsestr。tostring());

logger.debug('请求路径:' uri ',请求方式:普通请求,会话超时,需要重新登录!');

}

返回错误的

}

返回真实的

}

公共字符串getLogoutUrl() {

//使用默认值

if(字符串实用程序。isempty(注销URL)){

返回默认注销网址

}

返回logoutUrl

}

public void setLogoutUrl(String logoutUrl){

}

通过获取会议中的用户对象是否存在来判断会议是否超时,如果会议超时,则根据不同的请求方式进行返回。如果是普通请求,则直接返回Java脚本语言脚本,该脚本可以将页面跳转到其它网址。如果是埃阿斯请求,则返回401状态码,并且在返回的页眉中加入sessionTimeout,该数据将会在前端使用。

该拦截器在SpringMVC配置文件中的配置如下:

span style=' font-size:14px;'!- MVC拦截器-

mvc:拦截器

!-网络登录拦截器-

mvc:拦截器

mvc:映射路径='/web/**'/

MVC:exclude-mapping path='/web/index '/!-防止循环重定向到首页-

MVC:exclude-mapping path='/web/log in '/

MVC:exclude-mapping path='/web/logout '/

MVC:exclude-mapping path='/web/doLogin '/

bean class=' com。伊沃。mhub。截击机。拦截器中的网络日志'/

/mvc:拦截器

/MVC:interceptors/span span style=' font-size:24px;'

/span

4.前端处理Session超时

对于普通请求,后端返回的是Java脚本语言脚本,会立刻执行,这里前端不需要任何处理。

对于埃阿斯请求,后端返回401状态码,并在页眉中设置的会话超时。这里使用jQuery的ajaxComplete回调函数处理,具体如下:

//实现创建交互式、快速动态网页应用的网页开发技术请求时判断会议是否失效

$(文档)。ajaxComplete(函数(事件、响应、设置){

var会话超时=响应。getresponse标头(“会话超时”);

if(sessionTimeout!=会话超时的空类型!='未定义'会话超时。长度0){

//这里写会议超时后的处理方法

}

});

好了,可以了,会话超时的用户都会得到处理。

总结

关于Javaweb项目会议超时解决方案就到这里,希望对大家有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: