转自:https://www.cnblogs.com/morlin/p/4928542.html
一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是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 ; } }
//全局的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请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html>[removed]window.open(‘http://192.168.0.118:8080/welcomeAction/loginUI.do’,’_top’);...
总结起来,解决Ajax请求Session失效的关键在于: 1. 在过滤器中检测Session状态,对Ajax请求设置特定的响应头。 2. 在前端JavaScript中监听Ajax请求的响应,根据响应头判断Session是否超时并做出相应处理。 这种...
针对AJAX请求Session失效的问题,我们需要一种方法来识别出这种情况并做出适当的响应。关键在于检查HTTP请求头中的`X-Requested-With`字段。这个字段在AJAX请求中会被设置为`XMLHttpRequest`,表明这是一个异步请求...
从内容上来看,文章内容的重复性可能是由于OCR扫描时识别错误或漏识别导致的,但核心内容表达清晰,即介绍了在使用AJAX进行前后端交互时,如何监测用户session状态,并在用户session失效时提供解决方案。这种解决...
通过上述方法,开发者可以有效地解决在使用Ajax请求时,Session失效导致无法正确跳转到登录页面的问题。这样的处理不仅能够提供更为流畅的用户体验,还可以增强应用的安全性。 需要注意的是,本文的技术背景主要...
总的来说,处理.NET MVC中的Session失效问题需要关注请求类型,区分Ajax和非Ajax请求,以及认证状态。通过自定义授权过滤器和调整客户端代码,我们可以确保用户在Session失效时被引导至登录页面,从而维护应用的安全...
通过这样的方式,我们能够有效地处理Ajax请求时的用户session失效问题,确保用户在session过期后能够被正确地引导至登录页面。同时,这也是一种常见的跨域问题解决方案,因为跨域请求同样需要在服务器端返回正确的...
因此,当前端的ajax请求到不同的域,session信息无法被正确传递,导致session失效。 解决这个问题的关键在于允许跨域请求携带cookies。在客户端(即浏览器端),我们需要在jQuery的ajax设置中添加`xhrFields:{...
综上所述,解决Vue+Spring Boot跨域和Session失效问题的关键在于配置CORS策略以允许携带Cookie的跨域请求,并确保Session配置正确。同时,考虑采用Token认证机制,如JWT,以实现更灵活的认证和授权管理。
在WEB开发过程中,经常...通过这段内容,我们可以了解到session数据同步问题的解决方案,以及HTTP请求方法GET和POST的差异和适用场景。这有助于我们在开发Web应用时做出更合理的技术选择,从而提升应用性能和用户体验。
这篇文章讲述了在Laravel 5.2版本中遇到的Session失效问题,并提供了解决方案。首先,文章提到了Laravel不使用传统的`$_SESSION`超全局变量,而是提供了自己的一套Session管理机制。开发者需要通过Laravel提供的...
3. **心跳检测**:在页面中添加定时的Ajax请求(也称为“心跳”或“ping”),在用户浏览网页时定期更新session,确保session不会因为超时而失效。这种方法需在前端和后端同时进行相应设置。 4. **保持登录状态**:...
在Web开发中,会话管理是保证网站安全性和用户体验的关键环节。其中,session是一种普遍采用的会话管理方式,它通过服务器端...在选择解决方案时,应当考虑到用户行为的多样性和服务器资源的承载能力,进行权衡和优化。
`jqSession.js`是一个基于jQuery的JavaScript库,主要...总的来说,`jqSession.js`是一个实用的工具,它通过jQuery的简洁语法提供了客户端会话管理的解决方案,降低了开发者的编程复杂度,提高了应用程序的用户体验。
- **开源框架缓存**:如Hibernate的一级缓存和二级缓存,Ehcache等,提供开箱即用的缓存解决方案。 - **Hibernate一级缓存**:Session级别,存储实体对象,事务范围内有效,用于同一事务内的数据共享。 - **...
在当今瞬机万变的市场环境中,快速高效的IT解决方案是您业务成功的关键。 大量AJAX技术,让用户操作更省心方便大量缓存技术,从而减轻服务器数据库负载目前市场上权限最全的商城系统(多级管理权限控制,让网站多人...
- 对于Ajax请求,可能需要自定义拦截器或手动处理令牌,因为隐藏字段不会随异步请求发送。 通过以上步骤,Struts1的令牌机制可以有效地防止页面的重复提交,保护业务数据的完整性。然而,随着技术的发展,现代框架...
### Java面试知识详解 #### 基础篇 ##### JDK常用的包 - **java.lang**:包含所有编程必需的基础类,如String、Math等。 - **java.util**:提供了大量...##### Ajax请求Session超时问题 - **解决方法**: - 设置...
- **项目经验**:准备好介绍自己参与过的项目,特别是遇到的技术挑战和解决方案。 - **沟通技巧**:清晰地表达自己的想法,积极倾听面试官的问题,并给出有针对性的回答。 - **行为面试**:准备STAR法则(Situation...
- **项目结构**:`VerificationCode.sln`是一个Visual Studio解决方案文件,可能包含了验证码生成和验证的相关项目和文件。 - **核心类**:`VerificationCode`可能是生成验证码的核心类,包含生成、存储和验证的...