最近兩天在項目中碰到,一個很奇怪的問題。同一個帳號屢次切換登陸時,會出現這個帳號的信息在session中找不到,雖然能夠登陸成功,可是以後這個用戶信息好像沒有保存到session中同樣,或者是被改變了,以前我一直是覺得被改變了,後來發現錯了。前端
今天,在公司的系統架構師的幫助下,終於解決了這個問題。web
首先咱們使用的resin的配置是 瀏覽器
<session-config>
<enable-url-rewriting>false</enable-url-rewriting>
<!--<use-persistent-store>true</use-persistent-store>-->
</session-config>安全
這樣的。這樣禁用了jsessionid以cookie的方式在頁面傳遞。可是咱們的前端是用jsessionid放到URL來進行會話的維持的。cookie
將jsessionid放到url中,這樣能夠不使用cookie。
不使用cookie,能夠避免遭遇用戶禁用cookie的狀況。另外,有安全性方面的考慮session
使用url rewrite有兩種方式:架構
1. http://***/wmail/welcome.action;jsessionid=abcLFJLwoeurlsjdlf?...
這種是將jsessionid放在action後面app
須要修改resin/conf/resin.conf中的配置爲:
<session-config>
<enable-cookies>false</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
</session-config>webapp
2. http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?...測試
除了要按照前面的一樣修改resin/conf/resin.conf中的配置爲:
<session-config>
<enable-cookies>false</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
</session-config>
還要在resin/conf/resin.conf中增長alternate-session-url-prefix的設置:
<server>
<class-loader>...</class-loader>
<alternate-session-url-prefix>/~jid=</alternate-session-url-prefix>
......
注意alternate-session-url-prefix的位置,不是在<session-config>裏面
測試中發現,按照這種方式配置後,url被重寫爲
http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?...
在瀏覽器中訪問會產生http 404 file not found 錯誤,經反覆檢查(吐血的經歷),發現須要修改resin/conf/resin.conf中的配置:
<server>
......
<host id="" root-directory=".">
<!--
<web-app id="/" document-directory="webapps/ROOT"/>
-->
</host>
</server>
將<web-app id="/" document-directory="webapps/ROOT"/>的設置屏蔽後才能正常訪問
http://***/~jid=abcLFJLwoeurlsjdlf/wmail/welcome.action?... 這樣的地址。