웹 작업을 하다 보면 세션 만료 문제를 고려해야 하는 경우가 많습니다. 세션이 만료되면 페이지가 로그인 인터페이스로 이동하게 되는데, 페이지가 만료되면 두 가지 방법이 있습니다. 사용자가 백그라운드를 요청하는 방법: 기존 방법과 비동기식 요청은 백그라운드로 이동하여 만료된 작업을 가로채고 직접 이동합니다. 그러나 비동기식 요청은 전체 페이지를 새로 고치지 않습니다. 세션 만료는 일반적인 방법으로 처리할 수 없으며 추가 작업이 필요합니다.
구체적인 아이디어: 인터셉터에서 Ajax 요청인지 확인합니다. Ajax 요청인 경우 메시지가 반환됩니다. 페이지에 전역 Ajax 처리 이벤트를 추가하여 메시지를 판단하고, 세션이 만료되었다고 보고되면 위치는 로그인 페이지로 이동합니다
첫 번째 단계에서 인터셉터는 Ajax 요청인지 여부를 결정합니다.
if(request.getHeader("x-requested-with")!=null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //是ajax请求,则返回个消息给前台 PrintWriter printWriter = response.getWriter(); printWriter.print("{sessionState:timeout}"); printWriter.flush(); printWriter.close(); }else{ //不是ajax请求,则直接跳转页面 }
두 번째 단계는 글로벌 Ajax 처리 이벤트를 설정하고 인터셉터나 필터와 유사하게 세션 만료를 처리하는 것입니다.
$.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", cache:false , complete:function(data,TS){ //对返回的数据data做判断, //session过期的话,就location到一个页面 } } });
이것은 jQuery를 기반으로 한 비동기 처리 메커니즘이며, 완전한 코드를 작성하지 않았습니다. 지난번에 회사에서 작성한 코드를 가져올 수 없었습니다. 기사의 일부 코드는 온라인에서 찾아서 붙여넣었습니다. ㅋㅋㅋ 벌써 아침 30시가 넘었는데 너무 졸려서 그냥 생각을 적었어요.
PS: Ajax 작업 전역 모니터링, 사용자 세션 무효화
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 점프 문제를 처리하기 위한 jQuery ajax 전역 함수에 대한 자세한 내용은 다음을 참조하세요. 관련 기사 PHP 중국어 웹사이트!