用户登录后将所有网页重定向到HTTPS


Redirect all webpages to HTTPS after user logs in?

我正在使用PHP构建一个混合的https://http网站。当用户登录(通过https)时,我用用户名和会话设置了一个安全cookie。登录后(所以一旦设置了cookie),我想将所有流量重定向到https,因为登录后每个页面上都有特定于用户的内容。最初我将网站设置为只使用https,但在四处搜索后,似乎只有在需要时才使用SSL更好(所以当用户没有登录http时会使用)。我可以使用PHP/javascript或在.htaccess文件中添加一些关于cookie的命令来实现这一点吗?提前感谢!

这是假设您已将会话配置为仅通过HTTPS工作,否则,这只是假装安全(使用session.cookie_secure)。

您也可以在登录时设置(http,而不是https)cookie:

setcookie('wantshttps','true',0,'/');

并且在.htaccess:中

RewriteCond %{HTTP_COOKIE} wantshttps=true
RewriteCOnd %{HTTPS} !on
RewriteCOnd %{REQUEST_METHOD} !POST
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,QSA]

因此,如果您检测到cookie为"true",但为未登录用户(会话已过期等),请记住将其设置为false或取消设置。

就HTML中的URL而言,相对URL应该处理这一问题,因为它们使用基地址的协议。如果需要引用其他网站,您可以使用省略了协议名称和冒号的URL,例如//www.example.com/foo,它将被解释为http://www.example.com/foo或https://www.example.com/foo取决于参考页面的协议。

查看php.net header()函数