Php 用户登录后是否将所有网页重定向到HTTPS?

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

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

查看php.net
header()
function

查看php.net
header()
function

这是假设您已将会话配置为仅在HTTPS上工作,否则,这只是假装安全(使用)

您还可以在登录时设置(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或取消设置它。

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

您还可以在登录时设置(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,这将被解释为引用页面的协议或取决于引用页面的协议。

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

如果您使用cookie和会话,您应该始终使用HTTPS。否则,HTTP上的会话cookie很容易被第三方获得。请参阅并确保在登录时使用session_regenerate_id(),这样以前通过http发送的session id就不再有用了。这将防止会话劫持的一些危险。'previous session id over http'?就我而言,一开始就不应该存在/不应该创建一个。如果您使用cookie和会话进行操作,您应该始终使用HTTPS。否则,HTTP上的会话cookie很容易被第三方获得。请参阅并确保在登录时使用session_regenerate_id(),这样以前通过http发送的session id就不再有用了。这将防止会话劫持的一些危险。'previous session id over http'?就我而言,一开始就不应该存在/不应该创建一个。好的提示,除非你从没有https的另一个来源/链接到达网站的(deeplink),在这种情况下,从访问者(没有注意到http/https的差异)的角度来看,“突然注销”会让他们感到困惑。因此,虽然这是一条有效的评论,当然应该用于内部链接,但检测和重定向对您的客户来说有点重要。@Wrikken-要么整个请求的页面受到保护,要么HTTP链接不显示内容,要么页面是公共的,然后,当使用HTTP请求时,您可以省略特定于用户的内容。这就是问题所在:HTTP上不会有特定于用户的内容,但有许多应用程序中的链接对来宾(少量内容)和登录用户(额外功能)都有效,这不会反映在url中,但是仅仅是因为登录的好处。初始url本身将不受保护地发送,是的,我假设,由于此url是一个外部链接,因此能够窥探用户访问此链接(仅包含公共内容)不是一个安全问题。好提示,除非您从没有https的其他源/链接到达网站的(deeplink),在这种情况下,从访问者(没有注意到http/https的差异)的角度来看,“突然注销”会让他们感到困惑。因此,虽然这是一条有效的评论,当然应该用于内部链接,但检测和重定向对您的客户来说有点重要。@Wrikken-要么整个请求的页面受到保护,要么HTTP链接不显示内容,要么页面是公共的,然后,当使用HTTP请求时,您可以省略特定于用户的内容。这就是问题所在:HTTP上不会有特定于用户的内容,但有许多应用程序中的链接对来宾(少量内容)和登录用户(额外功能)都有效,这不会反映在url中,但是仅仅是因为登录的好处。初始url本身将是不受保护的发送,是的,我假设,由于此url是一个外部链接,因此能够监听用户访问此链接(仅包含公共内容)不是一个安全问题。HTTPS协议应防止中间人攻击,但此
wantshttps
cookie是通过HTTP发送的。这使它变得毫无用处,因为在这种情况下,它可以被操纵,会话cookie也可以以明文发送。@martinstoeckli:这就是问题所在:任何人都可能知道用户想要HTTPS,但会话cookie被配置为仅通过HTTPS发送。这只是捕获对页面的请求(最终用户会将其视为已注销的用户/来宾),并将其重定向到用户登录的https页面。当然,大多数请求/内部链接都会自动使用https,但这会捕获来自其他站点的链接,从而将用户从注销站点重定向到其他站点