So-net無料ブログ作成
検索選択

cookieでハマるハマる。 [cakePHP]

前回の記事で書いた、cookie

cakePHPで保存したcookieのデータをjavascriptで読む事は出来た。

だけど、cakePHPで保存したCookieデータをjavascriptで上書きするのがどうにも上手く行かない。
同じ名前の別のcookieデータが出来ちゃう。

しかも、ディレクトリをルートに指定しても、保存したディレクトリの上層に行くと読めなくなる。
cookieムズイ。

よくよく考えたら、今まではドコモ携帯に対応するために、
cookieを使わずサイトを構築する事が多かったんだよね。


で、もう一つ。

これはローカルでは起きなかったが、サーバにアップしたら起きた問題。

cookieを保存する時に、サーバが?なのか良くはわからないですが、
エスケープを付けてしまう事。
ローカルでは無かったので、エラーになってビビる。

こちらは
$data = stripslashes($this->Cookie->read('cookie'));


という感じで読み出す時に stripslashes() 関数をつければ解消できた。

う〜ん。罠多いな。

今日は風邪ひきで体のあちこちが痛いが、
やらなきゃ行けない事も多い。もうひと頑張りだ。。

JavascriptでcakeCookieを読む [cakePHP]

cakePHPのソースの中で、

$this->Cookie->write('name',serialize($this->data),false,time()+259200);


みたいに書いてクッキーを保存したとします。
※ソースの詳細は省略します。

そちらのCookie情報をJavascriptで読み取るには、

function getCookie(name) {
    var ck = document.cookie.split(';');
    
    for (var i=0; i < ck.length; i++) {
        var res = ck[i].split('=');
        if ( res[0] == name ) { return decodeURIComponent(res[1]); }
    }
}


こんな感じのFunctionを作って、それを

var ck = getCookie('CakeCookie[name]');


で読み出せばOKだと思ったんだが、上手く行かない。


なんだろ?と思って、CookieをConsoleに書き出してみて、「もしや?」と気づく。

そうなんです。
「 name」
という感じで、nameの前に半角スペースが入ってるんですね。

なので、最初のコードでresをsplitして配列にしたすぐ後で、

res[0] = res[0].replace(/^\s+|\s+$/g, "");


とやって、両端に半角スペースがあったら取っ払う。
phpみたいにtrimが無いので正規表現使ってreplaseする訳ですね。


これで、取得できました。

Cookieはほんとに単なる文字列なんだなぁ。と改めて実感。
さて、もう一息がんばろ。


※cakePHPはvar1.3

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。