2011-12-03 13 views
3

私が画像を取得するために、資産コントローラでこのコードを持っている:Set-Cookieヘッダーを複数回

function images($path,$image_name) 
{ 
    $image = "../assets/images/$path/$image_name"; 

    if (file_exists ($image) && (is_file($image))) { 
     $name = $image_name; 
    } else { 

    } 

    $file = getimagesize($image); 
    $filesize = filesize($image); 

    $time_cache = 360000000000; 
    $ts = gmdate("D, d M Y H:i:s", time() + $time_cache) . " GMT"; 
    header("Content-Type: {$file['mime']}\n"); 
    header("Content-disposition: inline; filename=\"$name\"\n"); 
    header("Content-Length: $filesize\n"); 
    header("Expires: $ts"); 
    header("Pragma: cache"); 
    header("Cache-Control: max-age=$time_cache"); 
    readfile ($image); 
} 

Iはconfig/config.php filetrueにCSRFの保護を設定しており、画像のためのすべての要求がSet-Cookieで送信されますヘッダー。そのため、csrf-cookieはいくつかのページで何度も設定することができます。それは心配するものなのでしょうか?もしそうなら、これを防ぐ手段がありますか?

答えて

2

私は `header_remove(「設定・クッキー」)でこれを行うために管理だから、コードはこの

header("Content-Type: {$file['mime']}\n"); 
header("Content-disposition: inline; filename=\"$name\"\n"); 
header("Content-Length: $filesize\n"); 
header("Expires: $ts"); 
header("Pragma: cache"); 
header("Cache-Control: max-age=$time_cache"); 
header_remove("set-cookie"); 
readfile ($image); 
1

setcookieを1回だけ使用した場合、phpは1回の応答で同じクッキーをブラウザに何度も送信します。おそらく、一部のブラウザがそれを読んでクラッシュするかもしれません。

私は、複数のCookie定義のためにInternet Explorerでajaxリクエストに問題が発生しました。誤ってCakePHPのセッションオブジェクトをループに開始したときです。私はwiresharkとの接続を盗聴している問題を検出しました。

+0

のように見えますheader_remove("set-cookie");

でこれを行うために管理し、そこにあれば、'、あなたは知っていますかこのようにすることで副作用はありますか? – georgesamper

+1

あなたは他のコンポーネント(またはセッションマネージャ)によって宣言されたものであっても、すべてのクッキーを削除するので、すべてのヘッダを再宣言する必要があります..もしheaders_list、parse、redeclareのようなものを使ってこれを行うと思われるなら、私はその良い(とシンプルな)グローバルなエスケープのフラグ変数を使用すると思う...奇妙だが、速い作品... –

+0

それは私のために働いて、セッションとcsrfが動作し、各アセットごとに新しいCookieを設定します。 – georgesamper