今天遇到个奇怪的问题:
我将自己的程序布置在服务器上,用内网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的话,也不是没有解决办法。具体方法在网上也有相关的讨论,大家可以在网上查找。