我正在使用带有 jsessionid 的 URL,例如。
http://localhost:8080/myservlet;jsessionid=123
然而,每当我在 HttpServletRequest 中读取会话 ID 时,该值永远不会是 123,而是生成的会话 ID,例如。B663A96D3FBC84B4A427C0810EAB9073。
为什么我的 jsessionid 被忽略了?
我正在使用带有 jsessionid 的 URL,例如。
http://localhost:8080/myservlet;jsessionid=123
然而,每当我在 HttpServletRequest 中读取会话 ID 时,该值永远不会是 123,而是生成的会话 ID,例如。B663A96D3FBC84B4A427C0810EAB9073。
为什么我的 jsessionid 被忽略了?
那是因为您指定了一个会话 ID,HttpSession
服务器内存中不存在具体对象。换句话说,给定的会话 ID 是未知/无效的。您需要指定一个会话 ID,它引用HttpSession
服务器内存中的有效和现有对象。
假设您当前在服务器的内存中确实有一个有效HttpSession
的 ID B663A96D3FBC84B4A427C0810EAB9073
,那么以下链接将起作用,并为最终用户提供对它的访问权限HttpSession
:
http://localhost:8080/myservlet;jsessionid=B663A96D3FBC84B4A427C0810EAB9073
我的猜测是,如今大多数应用程序服务器默认使用 cookie 进行会话跟踪,而不是 URL 重写。因此,如果您的请求在 URL 中同时包含会话 cookie 和 JSESSIONID,它可能会使用 cookie 中的那个。检查您的应用服务器的文档以了解如何配置它。