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



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

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

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

其他Env–执行相同的步骤,创建相同的cookie(WWW.XYZ.COM-173.19.1.23-443-cookie。因此,我的购物车页面上没有显示任何产品。

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

负载平衡器级别是否发生了任何事情?当最初使用http访问网站时,这个问题在两个env上都很好。

好吧,当登录屏幕出现时,可能会更改为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" />

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

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

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

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

根据我对您问题的理解,http是网站的默认值,而https可以使用web托管服务器启用。有一个选项,你需要启用它的https访问。

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

最新更新