1

I have my sessions configured to only use cookies, and to use a separate cookie for encrypted connections:

// 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();

All of the links on my site use relative paths. My question is, after a user is logged in how can I force all of the links to use HTTPS, and then go back to allowing HTTP after they logout?

I know I can force it on mandatory pages, for example:

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

But how would I handle conditional pages? When they're logged in I don't want to allow HTTP to be used at all.

4

1 に答える 1

1

httpHTTPS以外の認証Cookieがある場合は、リダイレクト先としてサーバーに到達するまでにhttps、MITMによって既に侵害されている可能性があるため、HTTPバージョンに保存できるCookieはドメインは、HTTPSバージョンのサイトに有効なログインCookieがあることを示唆しています。

表示されないクレデンシャルを使用してhttpリクエストを認証することはできないため、ユーザーがログインしているように見えるときに、クレデンシャルチェックコードをhttpsにリダイレクトするだけです。

httpからのページhttphttpsからのページにつながるリンクを作成するにhttpsは、プロトコルを省略します。

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

はプロトコル相対URLを使用した完全に有効なリンクであり、httpページに表示される場合はプロトコルがに設定さhttpれ、httpsページに表示される場合はプロトコルがに設定されhttpsます。

URL参照と相対URLの解決を定義するRFC3986には、次の例があります。

明確に定義されたベースURIを持つ表現内

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

相対参照は、次のようにターゲットURIに変換されます。

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