apache - 协议(protocol)从 https 切换到 http 时出现 Cookie 和 Session id 问题

标签 apache session jakarta-ee tomcat cookies

我有一个混合了 https 和 http 网址的电子商务网站。 我有两个配置了 Cisco ace 负载均衡器的环境,Apache 2.2 和 Tomcat 7.0.339。在一个环境中发生了问题,但在其他环境中没有发生。在这两种环境中,重定向都在 Apache 级别,SSL 配置在负载均衡器中。使用 cookie 维护 session 。

第一个 env – 当使用 https 访问站点 URL 时,例如 https://xyz.com,它会在浏览器中创建一个非安全 cookie,并创建 session ID。此 cookie 正在使用此名称创建 (WWW.XYZ.COM-173.19.1.23-443-COOKIE)。第一个问题,cookie 是如何使用 443 协议(protocol)创建的,因为在 firebug 中它显示为非安全 cookie。

现在,用户浏览网站并将商品添加到购物车(直到现在一切都在 https 中发生,因为网站最初是通过 https 访问的)。当他单击购物车链接时,URL 从 https 切换为 http,他能够看到购物车中的产品。 session ID 保持不变,正在使用相同的 cookie。这很奇怪,因为我在谷歌上读到,每当协议(protocol)从 https 更改为 http 时, session ID 应该更改。另外,为什么在两个协议(protocol)上使用相同的 cookie?

其他 Env – 执行相同的步骤,创建相同的 cookie (WWW.XYZ.COM-173.19.1.23-443-COOKIE)。当 URL 从 https 切换到 http 时, session ID 会更改,并且会返回端口 80 (WWW.XYZ.COM-173.19.1.23-80-COOKIE) 上具有此名称的不同 cookie。因此,我的购物车页面上没有显示任何产品。

补充一下,cookie 安全标志在代码库中的任何地方都没有设置为 true,在 Apache 中也没有在 Tomcat 中设置。为什么使用 443 创建 cookie,我不知道。

负载平衡器级别是否发生任何事情?当网站最初是使用 http 访问时,这个问题在两个环境中都能正常工作。

最佳答案

好吧,可能会在登录屏幕出现时更改为 https,并且在登录后不要返回到 http。因此,将所有数据保存在安全的 cookie 中,这样就不会有问题了。您的购物车详细信息将保存在安全的信息中。

至于您对安全标志的关注,它应该由应用程序服务器在发送 cookie 时设置。支持安全标志的浏览器只会在请求转到 HTTPS 页面时发送带有安全标志的 cookie。如果您设置安全标志,浏览器将阻止通过未加密 channel 传输 cookie。如何设置flag?

您的问题不包含您使用的内容,但供您引用:

Servlet 3.0 (Java EE 6):方法 setSecure 和 isSecure 可用于设置和检查 cookie 中的安全值。在 web.xml 中,你也可以这样设置:

<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>

在 Tomcat 中,您使用:

String sessionid = request.getSession().getId();
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");

在 ASP.NET 中,

Set the following in Web.config: <httpCookies requireSSL="true" />

对于某些具有 requireSSL 属性的对象,例如表单例份验证 Cookie,在 web.config 中为该特定元素设置 requireSSL="true"标志。

如果你使用像 PHP 这样的脚本语言,你可以在这里看看如何发送安全标志参数:

http://www.php.net/manual/en/function.session-set-cookie-params.php

虽然你应该使用安全标记的cookie,但如果你真的关心购物车的内容,你也可以考虑使用数据库 session 。如果您知道默认 session 如何保存文件和读取/写入文件,则性能相当。

关于apache - 协议(protocol)从 https 切换到 http 时出现 Cookie 和 Session id 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21070283/

相关文章:

java - Spring Security - 连续登录2次行为

java - FTPSClientretrievefile() 挂起

php - SCP 命令行和 PHP exec() 不做同样的事情

asp.net - 并发 ASP.NET session 最佳实践

session - JSF - Richfaces - 如何知道 session 是否超时(在客户端)

java - 在应用程序服务器中调用远程 Bean 与本地 Bean

java - Wildfly 上 DNSNameService 的 NoClassDefFoundError

servlets - 如何在 JavaEE 响应后执行代码

java - 速度模板元数据

apache - Python mkdir 错误所有者