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项目会议超时解决方案就到这里,希望对大家有所帮助。

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