1

我将会话配置为仅使用 cookie,并为加密连接使用单独的 cookie:

// only allow cookie based sessions
ini_set('session.use_only_cookies', TRUE);

// use a separate cookie for secure sessions
if(isset($_SERVER['HTTPS'])) {
    ini_set('session.cookie_secure', TRUE);
} else {
    ini_set('session.cookie_secure', FALSE);
}
$sess_prefix = ini_get('session.cookie_secure') ? 'SSL_' : '';
session_name($sess_prefix . 'PHPSESSID');

// start session
session_start();

我网站上的所有链接都使用相对路径。我的问题是,在用户登录后,如何强制所有链接使用 HTTPS,然后在他们注销后返回允许 HTTP?

我知道我可以在必填页面上强制使用它,例如:

if(!isset($_SERVER['HTTPS'])) {
    header('Location: https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
}

但是我将如何处理条件页面?当他们登录时,我根本不想允许使用 HTTP。

4

1 回答 1

1

如果您有非 HTTPS-only 的授权 cookie,那么当它们通过http您将它们重定向到您的服务器时https,它们可能已经被 MITM 破坏,因此您可以存储在 HTTP 版本的唯一 cookie该域暗示该站点的 HTTPS 版本存在有效的登录 cookie。

由于您无法使用未出现的凭据对 http 请求进行身份验证,因此只需在用户似乎已登录时将您的凭据检查代码重定向到 https。

要创建指向from和 to fromhttp页面的链接,只需离开协议即可。httphttpshttps

<a href="//example.com/foo.html">

是具有协议相关URL 的完全有效链接,如果它出现在http页面中,则协议将设置为http,如果它出现在https页面中,则协议将设置为https.

定义 URL 引用和相对 URL 解析的RFC 3986有以下示例:

在具有明确定义的基本 URI 的表示中

  http://a/b/c/d;p?q

一个相对引用被转换为它的目标 URI,如下所示。

...
"//g"           =  "http://g"
...
于 2013-02-10T04:15:14.770 回答