今天遇到個奇怪的問題:
我將自己的程序布置在服務器上,用內網IP來訪問一切正常;而如果用外網IP來訪問,則剛登錄成功就出錯。
根據測試發現是session的問題。我在登錄驗證的時候如果驗證成功,會將用戶ID存到session里面,在第二個頁面從session里面取出的卻是null。

經過反復調試終于發現我在用外網IP登錄的時候,登錄成功后系統自動轉到了內網IP地址訪問下一個頁面,這樣session是肯定訪問不到的。
找個這個根源就好辦了;檢查代碼,我用的是myeclipse開發頁面,在新建一個JSP頁面的時候,會默認產生一些代碼;問題就出在這里面。在代碼中有這樣幾行:
?? <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
? %>
? <base href="<%=basePath%>">
? 其中basePath取到的就是服務器上的內網IP訪問地址。

我把所有頁面的這幾行都去掉。大部分頁面正常,但仍有部分頁面不正確。
在我用response.sentRedirect(url);跳轉頁面的時候,系統再一次的訪問內網IP地址。不知是為什么,為了解決這個問題我只好改用javascript來跳轉
將上述代碼變為:
<script language="javascript">
?? document.location="頁面地址";
</script>
一切OK!

關于session失效有很多情況,但大致上除了session時間過期外,基本上就是程序的問題。系統認為兩個應用程序不能共用一個session.
但如果真的要兩個應用程序共用一個session的話,也不是沒有解決辦法。具體方法在網上也有相關的討論,大家可以在網上查找。


?