通常我們寫入cookie是直接使用setrawcookie,當然安全性是個問題,在此先不討論。
setrawcookie有個要注意的事項是他必須在http response出去之前就被呼叫,因為他是header的一部份,因此呼叫setrawcookie時要注意return value,或是自己必須確保呼叫之前沒有任何echo。

如果setcookie所要寫入的值是來自于另一個後端,而且這份資料並不是一定要在header建立cookie,為了不讓這個後端擋住前端機器吐頁面,我們可以讓他inline setup cookie。

sample PHP code
$cookie = array(
    ‘name’          => $name,
    ‘value’         => $value,
    ‘expiration’    => $expiration,
    ‘path’          => $path,
    ‘domain’        => $domain
);

$cookie[‘expiration’] *= 1000;  // from seconds to mileseconds
$config = json_encode($cookie);
$script = < Y.use(‘cookie’, function(Y){
    setcookie = function(config){
        Y.Cookie.set(config.name, config.value, {
            expires: new Date(config.expiration),
            path: config.path,
            domain: config.domain
        });
    };
    setcookie($config);
});
EOS;

echo $script;
讓php準備好要寫入的值(簽核加密等等),再讓簡單的anonymous function寫入。這樣不容易debug,需斟酌。

其中需要注意的是,php 生成的 date() 和 javascript new Date() 的基本單位不同,從 php 傳遞到 js 的時候需要乘以1000。

如果有指定expires time,cookie 就不應該是 session cookie。
Since this cookie is created with all of the default settings, it becomes a session cookie. from YUI