以编程方式确定连接是通过HTTP还是通过HTTPS进行?
如果$_SERVER['HTTPS']
设置为on
,页面加载通过https。但是,您应该将您的Cookie标记为安全,您可以使用setcookie
的其中一个参数进行操作。如果Cookie不安全,即使用户被立即重定向,它们也可能通过未加密的http进行传输,并可能被盗取。
http://php.net/manual/en/function.setcookie.php
对于实际的重定向,我会通过.htaccess重写,而不是PHP。使用以下内容创建一个.htaccess文件。
RewriteEngine On
RewriteBase/
RewriteCond %{HTTPS} !=on
RewriteCond ^(.*)$ https://www.example.com/$1 [R=301,L]
您可以使用if(!empty($_SERVER['HTTPS']))
来检查是否使用SSL。
如果您使用的是标准端口,则测试$_SERVER['SERVER_PORT'] == 443
也会起作用,但当然要检查使用HTTPS是否比测试端口是否为默认SSL端口要好。
但是,重定向不应该通过PHP,但通过的.htaccess完成(如果你使用的是Apache):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
使用$_SERVER['HTTPS']
确定。
如果是HTTPS,则变量$_SERVER['HTTPS']
将被设置为非零:
if (isset($_SERVER['HTTPS'])) {
# it's https
} else {
# it's not https
}
这将引发'E_NOTICE'为'$ _SERVER ['HTTPS']'当SSL未使用时不存在。使用'isset()'或'!empty()' – ThiefMaster 2011-03-21 22:18:15
@ThiefMaster - 非常正确。编辑。 – amphetamachine 2011-03-22 00:10:01
我使用的唯一cookie是会话cookie。我是否应该将其标记为安全? – pyon 2011-03-21 22:31:28
我在哪里必须保存'.htaccess'文件? – pyon 2011-03-21 22:34:40
在网页根目录(顶层)。还要确保文件以句点开头。 – nitro2k01 2011-03-21 22:41:10