私はlog in
時々データベースにセッションIDを保存しています。私が直面している問題は、別のユーザーが最初のユーザーの後にログインすると、同じセッションが DB に入力さwelcome username
れ、同じマシンに最初にログインしたユーザーの名前が反映されることです。ユーザーがログインするたびに新しいセッション ID を作成したいのですが、なぜかコードが機能しません。
HttpSession session = request.getSession();
String sessionID;
request.getSession(true);
sessionID = session.getId();
注: 上記のコードは、ユーザーが [ログイン] ボタンをクリックすると呼び出され、サーブレットに含まれています。
セッション 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();
}
以下の例外を取得します -
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)