GVKun编程网logo

Ajax请求session失效该如何解决(ajax请求success时出现异常怎么办)

14

此处将为大家介绍关于Ajax请求session失效该如何解决的详细内容,并且为您解答有关ajax请求success时出现异常怎么办的相关问题,此外,我们还将为您介绍关于ajax---解决ajax跨域请

此处将为大家介绍关于Ajax请求session失效该如何解决的详细内容,并且为您解答有关ajax请求success时出现异常怎么办的相关问题,此外,我们还将为您介绍关于ajax --- 解决ajax跨域请求导致session失效的问题、ajax Session失效如何跳转到登录页面、Ajax Session失效跳转登录页面的方法、ajax 操作全局监测,用户session失效的解决方法的有用信息。

本文目录一览:

Ajax请求session失效该如何解决(ajax请求success时出现异常怎么办)

Ajax请求session失效该如何解决(ajax请求success时出现异常怎么办)

一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。

一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.servletexception;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 登录过滤器
 *  拥有Session是否失效和用户是否登录2个条件判断
 *  如果是ajax请求则设置session超时
 * @author merlin.Ma
 *
 */
public class LoginFilter implements Filter{
  private String redirectUrl = "/login.html";
  private String sessionKey = "userName";
  @Override
  public void destroy() {
  }
  @Override
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,servletexception {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse rep = (HttpServletResponse) response;
    HttpSession session = req.getSession();
    if( session == null || session.getAttribute(sessionKey) == null){
      //如果判断是 AJAX 请求,直接设置为session超时
      if( req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest") ) {
        rep.setHeader("sessionstatus","timeout"); 
      } else {
        rep.sendRedirect( req.getcontextpath() + redirectUrl);
      }
    }else {
      chain.doFilter(request,response);
    }   
  }
  @Override
  public void init(FilterConfig filterConfig) throws servletexception {
    String url = filterConfig.getinitParameter("redirectUrl");
    String key = filterConfig.getinitParameter("sessionKey");
    redirectUrl = url == null? redirectUrl:url;
    sessionKey = key == null ? sessionKey : key ;
  }
}

代码简单,就不过多进行注释了,现在看JS部分的代码。当然是基于jQuery的~~

//全局的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("login.html");
    }
  }
});

页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。

ajax --- 解决ajax跨域请求导致session失效的问题

ajax --- 解决ajax跨域请求导致session失效的问题

起因:http是无状态的,因此我们通常需要用到cookie以及session来保存状态,session是在服务器端存储的,会和cookie一起使用,设置了session之后,会发送给浏览器一个cookie,这个cookie是session_id,当再次请求的时候浏览器会将它发送给服务器,以此来找到对应的session.
但是,我们实际使用的时候通常会用到跨域,就是向不同的域发起请求,但是默认情况下此时cookie是不会发送给服务器的,此时就导致了丢失session_id,从而导致了session的值为undefined。解决方案如下:
首先,前端页面发起ajax请求时,加上参数:

withCredentials: true,

像这样

$.ajax({
    type:
    url:''http://localhost:8080/user-login'',
    data:
    dataType:''JSON'',//注意哦,这一句要记得加上哦,我就是因为没加这句还查了好久的
    withCredentials: true,
    success:
    error:
})

我使用的后台语言是node.js,在node.js中使用cors跨域 
在app.js中加上(注意接口的顺序哦):

app.all(''*'', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "这里填可以跨域访问的域,不能填*哦");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",'' 3.2.1'');
    res.header("Access-Control-Allow-Credentials",true);
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

  ok,和bug一站到底,加油

ajax Session失效如何跳转到登录页面

ajax Session失效如何跳转到登录页面

在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截);一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采用AJAX请求时,将会返回登录页面的HTML代码,这肯定不是我们想要的,那么我们如何解决呢?请看以下步骤:

一、建立拦截器

packagecom.xxx.planeap.interceptor;

importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.apache.log4j.Logger;
importorg.apache.struts2.ServletActionContext;

importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.ActionSupport;
importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;
importcom.xxx.common.contants.ConstantsKey;
importcom.xxx.common.contants.SessionKey;
importcom.xxx.planeap.domain.User;
importcom.xxx.planeap.security.SecurityContextUtil;

/**
*
*@authorGomaOMA1989@YEAH.NET
*@versionv1.0
*@since2012-05-31

*
*/
publicclassSecurityInterceptorextendsAbstractInterceptor{
privatestaticfinallongserialVersionUID=1L;
privateLoggerlogger=Logger.getLogger(SecurityInterceptor.class);

@Override
publicStringintercept(ActionInvocationinvocation)throwsException{
//TodoAuto-generatedmethodstub

StringclassName=invocation.getAction().getClass().getName();
Stringaction=className.substring(className.lastIndexOf(".")+1,className.length());
StringactionName=invocation.getProxy().getActionName();

Stringresult;
HttpServletRequestrequest=ServletActionContext.getRequest();
HttpServletResponseresponse=ServletActionContext.getResponse();
Stringtype=request.getHeader("X-Requested-With");
Useruser=(User)ActionContext.getContext().getSession().get(SessionKey.CURRENT_USER);
if(user==null){
logger.debug("SecurityCHECKED:NEEDTOLOGIN");
if("XMLHttpRequest".equalsIgnoreCase(type)){//AJAXREQUESTPROCESS
response.setHeader("sessionstatus",ConstantsKey.MSG_TIME_OUT);
result=null;
}else{//norMALREQUESTPROCESS
result=ActionSupport.LOGIN;
}
}else{
logger.debug("SecurityCHECKED:USERHASLOGINED");
SecurityContextUtil.setCurrentUser(user);
booleanhanPerm=SecurityContextUtil.hasPerm(action,actionName);
logger.debug("SecurityCHECKED:PERMISSION---"+action+"."+actionName+"="+hanPerm);
result=invocation.invoke();
}
returnresult;
}
}

二、定义全局AJAX请求结束处理方法

//全局的AJAX访问,处理AJAX清求时SESSION超时

$.ajaxSetup({

contentType:"application/x-www-form-urlencoded;charset=utf-8",

complete:function(XMLHttpRequest,textStatus){

//通过XMLHttpRequest取得响应头,sessionstatus

var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");

if(sessionstatus=="timeout"){

//这里怎么处理在你,这里跳转的登录页面

window.location.replace(PlanEap.getActionURI("login"));

}

}

});

Ajax Session失效跳转登录页面的方法

Ajax Session失效跳转登录页面的方法

在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截);一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采用AJAX请求时,将会返回登录页面的HTML代码,这肯定不是我们想要的,那么我们如何解决呢?请看以下步骤:

一、建立拦截器

package com.xxx.planeap.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.xxx.common.contants.ConstantsKey;
import com.xxx.common.contants.SessionKey;
import com.xxx.planeap.domain.User;
import com.xxx.planeap.security.SecurityContextUtil;
/**
* 
* @author Goma OMA1989@YEAH.NET
* @version v1.0
* @since 2012-05-31
* 
*/
public class SecurityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
private Logger logger = Logger.getLogger(SecurityInterceptor.class);
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
String className = invocation.getAction().getClass().getName();
String action = className.substring(className.lastIndexOf(".")+1,className.length());
String actionName = invocation.getProxy().getActionName();
String result;
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String type = request.getHeader("X-Requested-With");
User user = (User) ActionContext.getContext().getSession().get(SessionKey.CURRENT_USER);
if (user == null) {
logger.debug("SECURITY CHECKED: NEED TO LOGIN");
if ("XMLHttpRequest".equalsIgnoreCase(type)) {// AJAX REQUEST PROCESS
response.setHeader("sessionstatus", ConstantsKey.MSG_TIME_OUT);
result = null;
} else {// NORMAL REQUEST PROCESS
result = ActionSupport.LOGIN;
}
} else {
logger.debug("SECURITY CHECKED: USER HAS LOGINED");
SecurityContextUtil.setCurrentUser(user);
boolean hanPerm = SecurityContextUtil.hasPerm(action, actionName);
logger.debug("SECURITY CHECKED: PERMISSION---"+action+"."+actionName+"="+hanPerm);
result = invocation.invoke();
}
return result;
}
}

二、定义全局AJAX请求结束处理方法

//全局的AJAX访问,处理AJAX清求时SESSION超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
//通过XMLHttpRequest取得响应头,sessionstatus 
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); 
if(sessionstatus=="timeout"){
//这里怎么处理在你,这里跳转的登录页面
window.location.replace(PlanEap.getActionURI("login"));
}
}
});

也就是ajax发送请求时如果拦截返回一个表示就跳转,否则执行正常操作。

您可能感兴趣的文章:
  • express如何解决ajax跨域访问session失效问题详解
  • 使用Ajax时处理用户session失效问题的解决方法
  • 完美解决ajax访问遇到Session失效的问题
  • ajax 操作全局监测,用户session失效的解决方法
  • ajax在兼容模式下失效的快速解决方法
  • Ajax请求session失效该如何解决
  • 如何解决ajax在google chrome浏览器上失效
  • ajax请求Session失效问题
  • ajax更新数据后,jquery、jq失效问题
  • 解决IE9下JQuery发送ajax请求失效的方法

ajax 操作全局监测,用户session失效的解决方法

ajax 操作全局监测,用户session失效的解决方法

ajax 操作全局监测,用户session失效的解决方法

jQuery(function ($) {
// 备份jquery的ajax方法 
var _ajax = $.ajax;
// 重写ajax方法,先判断登录在执行success函数 
$.ajax = function (opt) {
var _success = opt && opt.success || function (a, b) { };
var _opt = $.extend(opt, {
success: function (data, textStatus) {

try {

if (data.sessionstatus == false) {
//用户失效进行操作
//return;
} 

} catch (e) {

}
_success(data, textStatus);
}
});
_ajax(_opt);
};
});

以上这篇ajax 操作全局监测,用户session失效的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:
  • express如何解决ajax跨域访问session失效问题详解
  • 使用Ajax时处理用户session失效问题的解决方法
  • 完美解决ajax访问遇到Session失效的问题
  • Ajax Session失效跳转登录页面的方法
  • ajax在兼容模式下失效的快速解决方法
  • Ajax请求session失效该如何解决
  • 如何解决ajax在google chrome浏览器上失效
  • ajax请求Session失效问题
  • ajax更新数据后,jquery、jq失效问题
  • 解决IE9下JQuery发送ajax请求失效的方法

关于Ajax请求session失效该如何解决ajax请求success时出现异常怎么办的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ajax --- 解决ajax跨域请求导致session失效的问题、ajax Session失效如何跳转到登录页面、Ajax Session失效跳转登录页面的方法、ajax 操作全局监测,用户session失效的解决方法等相关内容,可以在本站寻找。

本文标签: