当协议从https切换到http时,Cookie和会话ID问题

时间:2014-01-12 01:40:47

标签: apache session java-ee tomcat cookies

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

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

现在,用户浏览网站并将项目添加到购物车(直到现在一切都在https中发生,因为网站最初使用https访问)。当他点击购物车链接时,URL从https切换到http,他可以在购物车中看到产品。会话ID保持不变,正在使用相同的cookie。这很奇怪,因为我在Google上看到,只要协议从https更改为http,会话ID就会发生变化。另外,如何在两个协议上使用相同的cookie?

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

只是要添加,cookie安全标志在codebase中的任何地方都没有设置为true,在Apache中也没有在Tomcat中设置为true。为什么用443创建cookie,我不知道。

是否在负载均衡器级别发生了什么?当最初使用http访问网站时,此问题在env上都能正常工作。

2 个答案:

答案 0 :(得分:0)

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

关于安全标志的问题,应该在发送cookie时由应用服务器设置。支持安全标志的浏览器只会在请求进入HTTPS页面时发送带有安全标志的cookie。如果您要设置安全标志,浏览器将阻止通过未加密的通道传输cookie。如何设置标志?

您的问题不包含您使用的内容,但仅供参考:

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属性的对象,如表单Authentication Cookie,请在web.config中为该特定元素设置requireSSL =“true”标志。

如果您使用PHP等脚本语言,可以在这里查看如何发送安全标志参数:

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

虽然您应该使用安全标记的cookie,但如果您真的关心购物车的内容,您也可以考虑使用数据库会话。如果您知道默认会话如何保持文件和读/写它们,那么性能就相当可比。

答案 1 :(得分:0)

为了解您的问题,http是网站的默认设置,而https可以使用网络托管服务器启用。您可以选择启用其https访问权限。

如果您需要将http切换为https,反之亦然,请尝试使用重定向代码。但是,如果您的网站使用支付网关处理电子商务,我建议您使用https来提高网站的安全性。