大多数会话基于 cookie,例如 php/jsp
但是对于移动设备,有不少是不支持cookies的。
如何为同一公司中使用相同 IP 地址的每个用户生成唯一标识?
PHP 和 JSP 都支持通过 URL 进行会话跟踪。
在 PHP 中,您只需将表单作为隐藏输入元素和链接作为查询字符串的一部分作为请求参数session_id()
传递。PHPSESSID
<form action="page.php">
<input type="hidden" name="PHPSESSID" value="<?= session_id() ?>">
...
</form>
<a href="page.php?PHPSESSID=<?= session_id() ?>">link</a>
PHP 引擎将自动扫描它并将其应用到无 cookie 会话中。
在 JSP 中它被称为“URL 重写”(在 PHP / Apache HTTPD 世界中具有完全不同的含义)。在视图端,如果需要,可以使用 JSTL<c:url>
重写 URL(它会自动检测需要)。
<form action="<c:url value="page.jsp">">
...
</form>
<a href="<c:url value="page.jsp">">link</a>
在控制器端,当在同一上下文中执行服务器端重定向时,您需要先HttpServletResponse#encodeRedirectURL()
在 URL 上运行,然后再执行sendRedirect()
.
response.sendRedirect(response.encodeRedirectURL("page.jsp"));
无论哪种方式,它都会自动附加jsessionid
到 URL,语法如下:
/page.jsp;jsessionid=5AE12D39BCE87F61029876BF1AA28
servletcontainer 将自动扫描它并将其应用到无 cookie 会话中。
当 cookie 失败时,一个很好的查询字符串会出现。不太安全,是的,但无论如何你别无选择。详细可以参考php session手册
session_regenerate_id(); // 获取新的会话 id
如果启用了会话 cookie,则使用 session_regenerate_id() 还将提交具有新会话 ID 的新会话 cookie。