最近用nginx部署服務器的時候,遇到了一個問題,就是每次訪問瀏覽器,sessionid都不一樣。我們做的項目使用了shiro框架。
AbstractValidatingSessionManager抽象類中有執行服務器時間驗證,
protected void validate(Session session, SessionKey key) throws InvalidSessionException {
try {
doValidate(session);
} catch (ExpiredSessionException ese) {
onExpiration(session, ese, key);
throw ese;
} catch (InvalidSessionException ise) {
onInvalidation(session, ise, key);
throw ise;
}
}
由於部署了負載均衡,其中一台服務器的時間不太對,導致 doValidate(session);出現異常,執行了onExpiration(session, ese, key);,該方法執行了deleteMe,導致會生成新的sessionId。
最后通過linux設置時間同步,解決了這個問題。