当用户尝试使用http访问我们的网站时,他们会通过Application.cfc中的此代码重定向到https:
short_hold
奇怪的是,如果他们从未通过http访问该网站,但碰巧点击指向http而非https的内部链接,则会将其注销。但是,一旦他们再次登录,他们就可以访问http链接,重定向到https并保持登录系统。
我做了一些逐行调试,当用户访问http时,https会话被覆盖。但是一旦用户访问http,https就会共享sessionid。
这是正确的行为吗?
在ColdFusion管理员会话设置中,HTTPOnly设置为true,安全cookie设置为false。
答案 0 :(得分:3)
将它们视为两个完全独立的域。
HTTPS
下的会话与HTTP
下的会话完全不同。这就是它的运作方式。
您应该将Web服务器配置为仅允许HTTPS
以上的连接,并自动将HTTP
请求重定向到HTTPS
,而不是在应用程序代码级别控制它。
可在此Google Developer page中找到更多信息,但我会粘贴精彩内容。
HTTPS保护您网站的完整性
HTTPS有助于防止入侵者篡改您的网站与用户浏览器之间的通信。入侵者包括故意恶意攻击者和合法但侵入性的公司,例如向网页注入广告的ISP或酒店。
HTTPS保护用户的隐私和安全
HTTPS可防止入侵者被动地收听您网站与用户之间的通信。
您希望确保您网站上的内部链接永远不会明确使用HTTPS
,因此请查看在布局文件中设置<base href="https://{yourDomain}" >以强制使用所有相对网址{{ 1}}。
答案 1 :(得分:1)
我一直遇到同样的问题,这就解决了。
在Server2008上,在IIS管理器中,打开ASP属性,展开“会话属性”,并将“安全连接上的新ID”更改为“false”。
答案 2 :(得分:0)
一些建议:
第一个简单:这可能不是正确的方向,但如果使用CGI.SERVER_PORT_SECURE而不是使用CGI.HTTPS会发生什么?
如果在从https切换到http时CF正在覆盖会话,为什么不在前端使用Web服务器而不是通过CF处理? IIS和Apache都可以轻松地重写或重定向,这样可以节省您一些时间来处理CF,特别是如果您的整个应用程序都是安全的。
答案 3 :(得分:0)
用户登录的检查似乎是在http到https检查和重定向之前。如果可能,您应首先检查https(重定向,如果是http),然后检查登录。