며칠 전 체크인 시스템을 작업 할 때 인기있는 세션 문제가 발생했습니다. 이 프로젝트는 Maven Management Directory의 Javaweb-Side 시스템 인 Spring+SpringMVC+MyBatis 프레임 워크입니다. 세션의 일부 문제의 경우 다음 분석이 이루어집니다. 여기서는 세션 수명주기 문제에 중점을 둡니다. 다른 정의는 다음과 같이 설명하지 않습니다.
먼저 세션의 수명주기를 설명해 봅시다.
스토리지 : 세션은 서버 측에 저장됩니다. 일반적으로 서버 메모리 (고속 액세스)에 저장되는 것을 방지하기 위해 Sessinon은 사용자가 처음으로 서버에 액세스 할 때 생성됩니다. 세션은 JSP, 서블릿 및 기타 프로그램에 액세스 할 때만 생성됩니다. HTML 및 이미지와 같은 정적 리소스에만 액세스하면 세션이 생기지 않습니다. Javaweb 응용 프로그램에서는 request.getSession (boolean xxx)을 호출하여 세션을 생성 할 수 있습니다. 부울 매개 변수가 사실 일 때, 새로운 세션이 여기에서 생성되어야합니다.
1. 세션 만료 시간 :
세션이 마지막으로 사용 된 시간이 지나면 세션이 실패한 시간에 도달 한 후 만료됩니다.
2. 다른 메소드 세션 .invalidate ()가 실행되어 세션이 적극적으로 유효하지 않습니다.
무효화 시간의 경우 web.xml에서 속성을 구성하여 정의 할 수 있습니다.
<Session-Config> <Session-TimeOut> 만료 시간 </session-timeout> </session-config>
실패 시간의 단위는 분입니다. 세션이 하루 동안 유효한 경우 60*24로 설정할 수 있습니다. 0 또는 음수로 설정하면 세션이 영구적으로 유효합니다. 실패 시간의 정의에 따르면이 상황을 쉽게 이해하기 쉽습니다.
브라우저가 닫힌 후 세션이 실패하는 이유는 무엇입니까?
알려진 내용을 바탕으로 간단한 예가 작성되었습니다.
@ControllerPublic 클래스 세션 테스트 {@requestmapping ( "/sessionTest") public String SessionTest (httpservletRequest request, httpservletResponse 응답) {System.out.println ( "success!"); httpsession session = request.getSession (); 세션 .SetMaxInactiveInterval (259200); request.setAttribute ( "creationtime", session.getCreationTime ()); // creation time request.setAttribute ( "id", session.getId ()); // id request.setAttribute ( "max", getMaxinactiveInterval (-1)); // maxinActive interval의 우선 순위보다 우선 순위가 높습니다. request.setAttribute ( "lasttime", session.getLastAccessedTime ()); // 마지막 사용 시간 request.setAttribute ( "sessionTest", session); // system.out.println (session.getCreationTime (); // system.out.println (session.getMaxInactiveInterval ()); // System.out.out.out.out.out.out.out.out.println (); "Page/Showsession"을 반환합니다. } <table cellpacing="0" cellpadding="0"> <tr><td>Creation time:</td><td>${creationtime}</td></tr> <tr><td>id:</td><td>${id}</td></tr> <tr><td>Maximum survival 시간 : </td> <td> $ {max} </td> </tr> <tr> <td> 마지막으로 사용한 시간 : </td> <td> $ {lasttime} </td> </tr> <tr> <td> 세션 : </td> <td> $ {sessiontest} </td> </tab>분석:
세션의 무효화 시간은 실제로 브라우저가 닫힌 시점이라는 것을 알 수 있습니다. 따라서 브라우저가 닫히지 않고 다시 액세스 할 수있는 경우에만 로그인 상태를 계속 사용할 수 있습니다. 위에서 설정 한 무효화 시간은 무엇을 나타내나요?
브라우저와 서버 사이에 세션이 생성되었습니다. 클라이언트는 오랫동안 서버와 상호 작용하지 않았기 때문에 (최대 절전 모드 시간) 서버는이 세션을 파괴했습니다. 클라이언트가 서버와 다시 상호 작용 한 이전 세션은 존재하지 않았습니다. 내 이해는 무효화 시간이 세션 중에 만 적용된다는 것입니다. 브라우저가 닫히고 세션이 종료되면 무효화 시간이 영구적으로 유효하게 설정되어 브라우저가 닫히고 세션이 닫히는 순간입니다. 이 문제를 해결하기 위해 쿠키를 세션과 혼합 할 수 있습니다. 그런 어리석은 방법이 있습니다.
쿠키를 적극적으로 추가하여 저장 디렉토리 및 생존 시간을 설정하십시오.
public static void addcookie (문자열 이름, 문자열 값, int 연령, httpservletresponse 응답)는 unsupportedencodingexception {cookie c = new Cookie (이름, urlencoder.encode (value, "utf-8")); c.setmaxage (나이); c.setpath (경로); 응답 .addcookie (c); } 다시 액세스 할 때 Cookie[] cookies = request.getCookies(); 쿠키를 가로 지르려면 쿠키 이름에 따라 원하는 쿠키를 얻거나 세션이라고 할 수 있습니다. 마지막으로, 원하는 결과를 얻고 세션 (쿠키라는 쿠키)이 브라우저의 투옥에서 탈출합니다.
요약
위는 브라우저가 닫힌 후 J2EE- 세션 고장 문제에 대한 해결책입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!