今天遇到個奇怪的問題:
我將自己的程序布置在服務器上,用內網(wǎng)IP來訪問一切正常;而如果用外網(wǎng)IP來訪問,則剛登錄成功就出錯。
根據(jù)測試發(fā)現(xiàn)是session的問題。我在登錄驗證的時候如果驗證成功,會將用戶ID存到session里面,在第二個頁面從session里面取出的卻是null。
經(jīng)過反復調試終于發(fā)現(xiàn)我在用外網(wǎng)IP登錄的時候,登錄成功后系統(tǒng)自動轉到了內網(wǎng)IP地址訪問下一個頁面,這樣session是肯定訪問不到的。
找個這個根源就好辦了;檢查代碼,我用的是myeclipse開發(fā)頁面,在新建一個JSP頁面的時候,會默認產(chǎn)生一些代碼;問題就出在這里面。在代碼中有這樣幾行:
?? <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
? %>
? <base href="<%=basePath%>">
? 其中basePath取到的就是服務器上的內網(wǎng)IP訪問地址。
我把所有頁面的這幾行都去掉。大部分頁面正常,但仍有部分頁面不正確。
在我用response.sentRedirect(url);跳轉頁面的時候,系統(tǒng)再一次的訪問內網(wǎng)IP地址。不知是為什么,為了解決這個問題我只好改用javascript來跳轉
將上述代碼變?yōu)?
<script language="javascript">
?? document.location="頁面地址";
</script>
一切OK!
關于session失效有很多情況,但大致上除了session時間過期外,基本上就是程序的問題。系統(tǒng)認為兩個應用程序不能共用一個session.
但如果真的要兩個應用程序共用一個session的話,也不是沒有解決辦法。具體方法在網(wǎng)上也有相關的討論,大家可以在網(wǎng)上查找。
?
我是在四川網(wǎng)廳的系統(tǒng)上部署了一個探針,
探針調用另外一個系統(tǒng)....
倆個系統(tǒng)在一個服務器上,一個是8001域 一個是8003域
每次訪問網(wǎng)廳的時候,登錄進去之后,然后再點擊 就會退出...
但是內網(wǎng)訪問 一切ok....
或者 把兩個系統(tǒng)部署在不同的服務器上 外網(wǎng)訪問也ok