【发布时间】:2013-02-13 00:48:44
【问题描述】:
目前我的服务器上已包含 SSL。想要强制我的用户通过 https 使用登录页面登录。
<?php
if (empty($_SERVER['https']) || $_SERVER['https'] != 'on') {
header('location: https://my_login_page');
exit();
}
# rest of code
...
但如果没有 SSL,就会出现问题。
现在我有情况了。用户请求以下 URL
http://domain.com/login.php
在这里,我无法访问$_SERVER['https'],我想确保可以将用户重定向到
https://domain.com/login.php
例如,SSL 证书在一段时间后过期,并希望让用户使用无安全连接的登录。
我的目标是这样的例子:
if (ssl_installed() && (empty($_SERVER['https']) || $_SERVER[] != 'on')) {
header('location: https://domain.com/login.php');
exit();
}
# when there's no SSL it continues using HTTP
是的,想编写函数(例如:ssl_installed()),当可以使用安全连接时返回true,否则返回false。
我尝试使用 get_headers() 并意识到它总是针对 https:// 链接返回 false。
可能的解决方案:
我已经有了可行的解决方案。我数据库中的配置表包含行ssl=1(或0),在建立数据库连接后,我使用这个值来决定是否可以使用SSL,上面提到的函数使用这个值来返回结果。
我的问题是:有更简单的解决方案吗?
明确一点:我正在寻找 PHP-ONLY SOLUTION(自动检测)!
任何帮助将不胜感激。
【问题讨论】:
-
您使用的所有 php 文件中是否都有通用配置文件?比如config.php?
-
@sjdaws 当然是的,我保留了用于 PDO 的数据库帐户信息。
-
$_SERVER["HTTPS"](大写字母)是否存在? PHP doc -
@Passerby - 在我的服务器上同时使用 https 和 HTTPS。但是 HTTP 请求中不存在 $_SERVER['HTTPS'] 并且没有告诉我是否可以使用 https:// 而不是 http:// 将页面重定向到相同的页面。