SessionID是由服务器的那部分程序生成的

修改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的算法,或者自己实现相关部分等 等。

参考: https://zhidao.baidu.com/question/918631293708871579.html
http://www.cnblogs.com/hibernate3-example/archive/2012/05/09/2492796.html

猜你喜欢

转载自rd-030.iteye.com/blog/2360606