发布日期:2018-03-26
如何得知是否正在使用HTTPS协议(不通过读取[_SERVER['HTTPS']字段)+ 查看更多
如何得知是否正在使用HTTPS协议(不通过读取[_SERVER['HTTPS']字段)
+ 查看更多
发布日期:2018-03-26 14:12
分类:PHP
浏览次数:188
我在网上找到一些答案说,如果服务器在使用HTTPS安全协议,需要检查$_SERVER('HTTPS'), 我的问题是有时在一些服务器上,$_SERVER['HTTPS']会被看作未定义的变量结果导致错误。是有其他什么变量可以被使用吗?
简单说,我用下面这段代码判断是不是HTTPS连接:
简单说,我用下面这段代码判断是不是HTTPS连接:
if(isset($_SERVER['HTTPS'])) { if ($_SERVER['HTTPS'] == "on") { $secure_connection = true; } }
回答
“如果PHP脚本被HTTPS安全协议访问的话,那么你需要设置一个非空值。” 所以HTTPS确实是on的时候仍会返回false,你想知道$_SERVER['HTTPS']是否存在或是否为非空,有时当HTTPS没有为某指定服务器正确设置时,你还可以尝试检查这个参数
$_SERVER['SERVER_PORT'] == 443
但是注意一些服务器也会把$_SERVER['HTTPS']设置为非空值,所以确保也检查这个变量。
参考:Documentation for $_SERVER and $HTTP_SERVER_VARS
参考:Documentation for $_SERVER and $HTTP_SERVER_VARS
综合起来,代码可以这样写:
function isSecure() { return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443; }