有没有办法检测HTTP或HTTPS,然后强制使用HTTPS与JavaScript?
我有一些代码用于检测HTTP或HTTPS,但我不能强制它使用https:.
我正在使用window.location.protocol属性来设置站点的任何内容,https:然后刷新页面以希望重新加载加载到浏览器中的新https'ed URL.
if (window.location.protocol != "https:") {
window.location.protocol = "https:";
window.location.reload();
}
Run Code Online (Sandbox Code Playgroud) 我在网上看过很多教程,说你需要检查$_SERVER['HTTPS']服务器连接是否用HTTPS保护.我的问题是,在我使用的某些服务器上,$_SERVER['HTTPS']是一个未定义的变量导致错误.是否有另一个我可以检查的变量应该始终定义?
为了清楚起见,我目前正在使用此代码来解决它是否是HTTPS连接:
if(isset($_SERVER['HTTPS'])) {
if ($_SERVER['HTTPS'] == "on") {
$secure_connection = true;
}
}
Run Code Online (Sandbox Code Playgroud) 在网络上,我看到大量的JavaScript程序员写作window.location而不仅仅是location.我很好奇是否有人可以提供解释原因.window是全局对象,因此没有必要包括 - 不是吗?我的意思是,你不要看的人写的window.Math.floor还是new window.Date(),所以我很好奇,为什么它会与指定location.
我理解这location被认为是你所在窗口的"属性",我认为这是有道理的.但即便如此,我也没有理由指定全局对象; 首先不可能覆盖location,不是没有重定向页面.
那么,这只是一个长期使用的怪癖,它与我们编写JavaScript的方式相结合,还是有一些切实的理由以这种方式做事?我查了一下谷歌,但是唉,我什么也没想到......
目前我的服务器上已包含SSL.想通过https强制我的用户使用登录页面登录.
<?php
if (empty($_SERVER['https']) || $_SERVER['https'] != 'on') {
header('location: https://my_login_page');
exit();
}
# rest of code
...
Run Code Online (Sandbox Code Playgroud)
但是当没有SSL时,这是一个问题.
现在我有情况.用户请求关注URL
http://domain.com/login.php
Run Code Online (Sandbox Code Playgroud)
在这里,我无法访问$_SERVER['https']并希望确保可以将用户重定向到
https://domain.com/login.php
Run Code Online (Sandbox Code Playgroud)
例如,SSL证书在一段时间后过期,并希望保持用户使用登录w/out安全连接.
我的目标是这样的例子:
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
Run Code Online (Sandbox Code Playgroud)
是的,想写函数(例如ssl_installed():),true当可能使用安全连接时返回,否则false.
我已经尝试过使用get_headers()并意识到它总是会对https://链接返回false .
可能的方法:
我已经有了解决方案.我的数据库中的配置表包含行ssl=1(或0),并且在建立数据库连接后我使用此值来判断是否可以使用SSL,并且上面提到的函数使用此值返回结果.
我的问题是:有更简单的解决方案吗?
要明确:我正在寻找PHP-ONLY SOLUTION(自动检测)!
任何帮助,将不胜感激.