我使用HttpUrlConnection与servlet连接,servlet将sessionid返回给我的应用程序,然后我的应用程序启动默认浏览器。在servlet返回sessionid之前,我在会话中设置了一个属性。
HttpSession session = request.getSession();
session.setAttribute("ErrorInfo", "wrong!");
在 android 应用程序中,它获取 sessionid 并启动默认浏览器。
Uri uri = Uri.parse("https://192.168.1.100:8443/test/error.jsp;jsession=" + sessionid);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
在error.jsp中,它会得到这样的属性:
<%=session.getAttribute("ErrorInfo") %>
<%=session.getId() %>
测试的时候,我以为会显示“错误!”,但是jsp页面显示“null”,浏览器生成了一个新的会话。地址栏中的sessionid与session.getId()的值不同。
例如地址栏中的url是“https://192.168.1.100:8443/test/error.jsp;jsessionid=C4E6732EBB4C17F409AB41143735C096”。
在这种情况下,我认为浏览器不应该生成新的会话,但它确实生成了。
好的,我自己解决了这个问题。问题是由浏览器引起的。首先,我使用浏览器访问网站,浏览器生成一个会话,然后浏览器会使用这个会话,直到浏览器关闭。所以我的应用程序传递的 sessionid 将被浏览器忽略。为了解决这个问题,我让app获取浏览器的session,并在HttpUrlConnection中使用这个session,所以整个过程只有一个session。