【发布时间】:2010-10-19 10:27:02
【问题描述】:
我有一个基于 servlet 的应用程序,它创建一个会话并在第一次访问它时存储一些信息。此信息用于后续页面。如果从 msword 文档中单击初始 url,则该过程会遇到麻烦。 servlet 创建一个会话并将响应发回。响应显示在新打开的浏览器中。从浏览器内部单击的链接会创建一个新会话。从浏览器单击的任何后续 url 都会重用第二个会话
有没有办法强制服务器识别第二个请求的初始会话?
我创建了一个示例 servlet,它检索会话并将 ID 连同一个新链接一起写入以回调自身。
下面是测试servlet
public class SessionServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuffer sb = new StringBuffer();
sb.append("<HTML>\r\n<HEAD>\r\n<title>\r\nServlet Session Test\r\n</title>\r\n");
sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
sb.append("</HEAD>\r\n<BODY>\r\n");
HttpSession userSession = request.getSession(true);
if (userSession.isNew()) {
sb.append("User Session is new\r\n");
} else {
sb.append("User Session is old\r\n");
}
sb.append("<br>User Session ID = " + userSession.getId() + "<BR>");
sb.append("URL <a href=\"http://localhost:9080/myTestApp/SessionTest\"> Session Test </a>");
sb.append("</BODY> </HTML>\r\n");
response.setContentType("text/html; charset=UTF-8");
ServletOutputStream sos = response.getOutputStream();
sos.write(sb.toString().getBytes("UTF-8"));
}
}
【问题讨论】:
-
在其他应用程序中单击链接时的行为有所不同。例如,Acrobat Reader 链接只创建一个会话,浏览器继续用于后续页面。
标签: http session servlets ms-word