少年よ大志を抱け: PHP: セッションにセキュリティ対策する

 コメントの書き方がよくわからなかったのでここで。

/*
 * セッションを完全に削除
 */
function strict_session_destroy(){
    // セッション変数を全て解除する
    $_SESSION = array();

    // セッションを切断するにはセッションクッキーも削除する。
    // Note: セッション情報だけでなくセッションを破壊する。
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
    }

    // HTTP <-> HTTPS 間でセッションの受渡し用Cookieも削除
    if (isset($_COOKIE[STRICT_SESSION_ENCRYPT_NAME])) {
        setcookie(STRICT_SESSION_ENCRYPT_NAME, '', time()-42000, '/');
    }

    // 最終的に、セッションを破壊する
    session_destroy();
}
少年よ大志を抱け: PHP: セッションにセキュリティ対策する

 setcookie() でセッションのクッキーに使用しているパスとドメインを指定しないと、ちゃんと消えない。

 ところでこのブログにはパーマネントリンクとトラバはないのか?

追記 2008-11-30

 じゃあどうしたらいいんだ、ってのを書かないとフェアじゃねーって意見があるかもしれないので書く。

setcookie(
	 session_name()                   // 名前
	,''                               // 値
	,time()-42000                     // 有効期限
	,ini_get('session.cookie_path')   // パス(URL)
	,ini_get('session.cookie_domain') // ドメイン
	);

追記 2008-11-30

 もしかしたら ini_get() を使えない環境もあったり、ってことで。

$cookie_params = session_get_cookie_params();
setcookie(
	 session_name() // 名前
	,''             // 値
	,time()-42000   // 有効期限
	,$cookie_params['path']   // パス(URL)
	,$cookie_params['domain'] // ドメイン
	);
session_get_cookie_params()

session_get_cookie_params

(PHP 4, PHP 5)

session_get_cookie_params ― セッションクッキーのパラメータを得る

PHP: session_get_cookie_params - Manual