데이터베이스에 사용자 세션 데이터를 저장하려고 시도하고 있습니다. 몇 가지 기사와 이것을 수행하는 방법에 대한 Tomcat 문서를 읽었습니다.Tomcat, JDBCStore를 사용한 사용자 세션 저장소, 즉시 세션 시간 초과
저는 Tomcat7 및 PostgreSQL을 사용 중이며 INSERT가 작동하지만 여전히 문제가 있는지 확인할 수 있습니다. 톰캣은 다음 데이터베이스에 사용자 세션을 삽입되는 것은 즉시 삭제된다
내 톰캣 tomcat7/conf의/context.xml에에서스 니펫 : 나는 또한 내 tomcat7/conf의이을 추가 한
...
<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleBackup="1"
minIdleSwap="0"
maxIdleSwap="0"
processExpiresFrequency="1"
saveOnRestart='true'
>
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:postgresql://localhost:5432/tomcat?user=[USER]&password=[PASSWORD]"
driverName="org.postgresql.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session"
/>
</Manager>
...
/catalina.properties :
...
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
...
나는 tomcat7/lib에 PostgreSQL JDBC 커넥터가 있습니다.
변화는 나는 시도했다 :
- 톰캣 6
- 톰캣 7
- MySQL의
- PostgreSQL을
나는 또한 conf의 다음을/logging.properties를 추가 한 희망에서 나는 이것을 더 디버깅 할 수있다 :
...
org.apache.catalina.session.PersistentManager.level = ALL
org.apache.catalina.session.PersistentManager.useParentHandlers = true
org.apache.catalina.session.level = ALL
org.apache.catalina.session.useParentHandlers = true
...
테이블 스키마는
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| session_id | varchar(100) | NO | PRI | NULL | |
| valid_session | char(1) | NO | | NULL | |
| max_inactive | int(32) | NO | | NULL | |
| last_access | int(64) | NO | | NULL | |
| app_name | varchar(255) | YES | MUL | NULL | |
| session_data | mediumblob | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
톰캣 로그 쇼 : 사전에
2013-06-27 14:16:33 IST LOG: execute <unnamed>: INSERT INTO tomcat_sessions (session_id, app_name, session_data, valid_session, max_inactive, last_access) VALUES ($1, $2, $3, $4, $5, $6)
2013-06-27 14:16:33 IST DETAIL: parameters: $1 = '22115A5964B70168B1752D5415DAD31C', $2 = '/Catalina/localhost/[SERVLET_NAME]', $3 = '\xaced...f72', $4 = '1', $5 = '1800', $6 = '1372338956718'
2013-06-27 14:16:33 IST LOG: execute <unnamed>: SELECT session_id FROM tomcat_sessions WHERE app_name = $1
2013-06-27 14:16:33 IST DETAIL: parameters: $1 = '/Catalina/localhost/[SERVLET_NAME]'
2013-06-27 14:16:33 IST LOG: execute <unnamed>: SELECT session_id, session_data FROM tomcat_sessions WHERE session_id = $1 AND app_name = $2
2013-06-27 14:16:33 IST DETAIL: parameters: $1 = '22115A5964B70168B1752D5415DAD31C', $2 = '/Catalina/localhost/[SERVLET_NAME]'
2013-06-27 14:16:33 IST LOG: execute <unnamed>: DELETE FROM tomcat_sessions WHERE session_id = $1 AND app_name = $2
2013-06-27 14:16:33 IST DETAIL: parameters: $1 = '22115A5964B70168B1752D5415DAD31C', $2 = '/Catalina/localhost/[SERVLET_NAME]'
감사 :
는Jun 27, 2013 2:16:33 PM org.apache.catalina.session.PersistentManagerBase processExpires
FINE: Start expire sessions PersistentManager at 1372338993228 sessioncount 1
Jun 27, 2013 2:16:33 PM org.apache.catalina.session.PersistentManagerBase processMaxIdleSwaps
FINE: Swapping session 22115A5964B70168B1752D5415DAD31C to Store, idle for 36 seconds
Jun 27, 2013 2:16:33 PM org.apache.catalina.session.PersistentManagerBase processExpires
FINE: End expire sessions PersistentManager processingTime 168 expired sessions: 0
PostgreSQL의 쇼를 기록합니다. 당신이 연결되어 있는지 일단 당신은 몇 가지를 확인해야
시도 tomcat7/CONT/logging.properties의 바닥에 'org.apache.catalina.session.level = FINE' 추가. Tomcat을 재시작하면 더 많은 세션 관련 디버그가 catalina.log (및 콘솔)로 이동해야합니다. 그것은 무슨 일이 일어나고 있는지에 대한 단서를 제공 할 수 있습니다. –
@WillKeeling 디버깅 제안에 감사하지만 사실은 이미 추가했지만, 내 게시물에 그것을 언급하는 것을 잊었다. 그것은 정말로 나에게 추가적인 유용한 정보를주지 못했다. 내가 포함 할 게시물을 편집했습니다. – messinga