log in
시간에 데이터베이스에 세션 ID를 저장하려고합니다. 내가 직면 한 문제는 다른 사용자가 첫 번째 세션 이후에 로그인하면 동일한 세션이 DB에 입력되고 welcome username
은 여전히 동일한 시스템에 처음 로그인 한 사용자의 이름을 반영한다는 것입니다. 사용자가 로그인 할 때마다 새 세션 ID를 만들고 싶지만 어떻게 든 내 코드가 작동하지 않습니다.Java Servlet에서 강제로 새 세션을 만드는 방법
HttpSession session = request.getSession();
String sessionID;
request.getSession(true);
sessionID = session.getId();
참고 : 위 코드는 사용자가 로그인 버튼을 클릭하여 서블릿에 포함 된 경우에 호출됩니다.
세션 ID는 이전 세션 ID가 만료 될 때까지 세션의 이전 값을 유지합니다. 10 명의 사용자가 로그인하면 동일한 세션 ID와 동일한 환영 이름을 갖게됩니다.
전문가의 조언이 필요합니다. :) 나가 놓일 필요가있는 어떤 세부 사항든지에 나가고있는 경우에 저에게 알게하십시오.
내가 사용하는 경우 -
if(session.isNew()){
System.out.println("New session created by default");
request.getSession(true);
sessionID = session.getId();
createTime = new Date(session.getCreationTime());
lastAccessTime = new Date(session.getLastAccessedTime());
initialtime = System.currentTimeMillis();
}else{
System.out.println("You have created a new session");
request.getSession().invalidate();
request.getSession(true);
sessionID = session.getId();
createTime = new Date(session.getCreationTime());
lastAccessTime = new Date(session.getLastAccessedTime());
initialtime = System.currentTimeMillis();
}
는 아래의 예외를 얻을 - 새로운 세션에 session
변수를 설정
SEVERE: Servlet.service() for servlet LoginToApp threw exception
java.lang.IllegalStateException: getCreationTime: Session already invalidated
at org.apache.catalina.session.StandardSession.getCreationTime(StandardSession.java:1025)
at org.apache.catalina.session.StandardSessionFacade.getCreationTime(StandardSessionFacade.java:74)
at LoginToApp.doGet(LoginToApp.java:56)
at LoginToApp.doPost(LoginToApp.java:208)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1303)
at java.lang.Thread.run(Thread.java:595)
로그 아웃이 깨졌습니다. 또는 귀하의 로그인. 아니면 둘다. –
나는 그렇게 생각하지 않는다. Dave.Login은 html 페이지 일 뿐이며 모든 것은 여기 서블릿에서 처리된다. – anujin
정말요? 흠. 일반적으로 로그 아웃 할 때 현재 세션을 무효화하기 때문에 (또는 로그 아웃하지 않았거나 로그 아웃 코드 만 실행해야하는 경우 로그인 할 때). 하지만 세션 ID는 실제로 게이팅 이슈가 아닙니다. 세션에서 * 무엇이 가장 중요한 것입니까? 세션이나 데이터베이스에 오래된 데이터가 남아있는 경우 로그인 또는 로그 아웃이 손상되었습니다. –