修改TOMCAT 默認的生成SESSION ID的算法和字符長度非常簡單,只需修改context.xml中的<Manager>標簽值,比如:
<Manager
sessionIdLength="20"
pathname="SESSIONS.ser"
maxActiveSessions="8000"
secureRandomAlgorithm="SHA1PRNG"
secureRandomClass="java.security.SecureRandom"
maxInactiveInterval="60"
/>
標紅的部分不用我說大家也應該知道了,算法除了SHA1PRNG還有好幾種,具體可以查看 JDK DOC的java.security.SecureRandom類章節.
更多配置見:http://tomcat.apache.org/tomcat-7.0-doc/config/manager.html
TOMCAT默認的SESSIONID生成器在高並發下可能產生些性能損失,因為采用了較為安全的隨機數來生成SESSION的ID值。
實際上TOMCAT生成的SESSIONID是不可能有重復值的,查看TOMCAT源碼文件:ManagerBase.java中的以下代碼
/**
* Generate and return a new session identifier.
*/
protected String generateSessionId() {
String result = null;
do {
if (result != null) {
duplicates++;
}
result = sessionIdGenerator.generateSessionId();
} while (sessions.containsKey(result)); //此處保證最終生成給客戶端使用的SESSIONID一定是不重復的
return result;
}
所以,不必擔心SESSIONID的安全性,如果有更好的實現,可以修改相應代碼用於特定項目中。
因此我們可以修改TOMCAT源碼中的SessionIdGenerator.java生成ID的函數部分,比如采用 java.util.UUID+java.util.Random+(隨機字符串)來構建更高效的生成SESSIONID的算法,或者自己實現相關部分等 等。