https页面跳转session丢失

近日在编写java servlet时,需要从https协议页面跳转回普通http页面,从而完成用户session中某一数值的变更,让我郁闷的是,跳转回http页面后,程序竟然无法获得session,也就无法完成用户session数值变更。
真是奇怪!
观察本地cookies发现会话ID还在,可是服务器端怎么都无法读取,然后观察浏览器信息发现, 对于不同协议的session id浏览器分别对待,也就没有办法从https跳转回http页面获取之前的session,但客户端浏览器如果手动输入之前的页面地址,session 又可以使用了。

通过实践找到两种办法继续使用跳转到https页面之前的session:
解决的前提都是https页面能支持传递导向页URL,也就是https页面操作完成后,可以导向指定的http页面。

1、打开中间件或者WEB容器的URL重写,把session id附在导向页URL中,从而让中间件接着使用之前的session,而不是重新生成。但是URL重写有较多的安全问题,不推荐使用。
在Google上搜索,还找到用获取URL中session id重写cookies的办法,但我没有实验成功。

2、导向页面中加入<meta http-equiv="refresh" content="『导向停留时间』";URL="导向的URL">,进行跳转,然后也可以获得跳转到https页面之前的session。

发表您的评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注