- 締切済み
CGIでCookie取得
if ($ENV{\'HTTP_COOKIE\'} eq \'hoge1=true\'){ $AAACookie = \'true\'; }else{ $AAACookie = \'false\'; } 上記のような感じでcookieから[hoge1=true]を取ろうとしているのですが、 単体だとうまくいくのですが、Google Analyticsの[__utma]とか[__utmb]等が 入ると[hoge1=true]のデータが入っているのに[AAACookie]の返しが[false]になってしまいます。 回避策等ありますでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- okmotokun
- ベストアンサー率59% (92/155)
「hoge1」という名前で発行したクッキーを確認(読み出し)するなら、 if ($ENV{'HTTP_COOKIE'} =~/hoge1=true/){ $AAACookie = 'true'; }else{ $AAACookie = 'false'; } でいいんじゃないですか。 ※この場合、¥は全部要らないです。(付けるのはおかしい)
- lesstia
- ベストアンサー率45% (44/96)
if ($data{'hoge1'} eq 'true;'){ のようにしないとだめかも知れません。 cookieの中身を確認してみてください。
- lesstia
- ベストアンサー率45% (44/96)
そもそも $ENV{\'HTTP_COOKIE\'} eq \'hoge1=true\' という判定に問題があるように見えます。 最初からcookieに複数来ることを考慮して、 @cookie = split(/ /, $ENV{\'HTTP_COOKIE\'}); foreach (@cookie) { ($key, $val) = split(/=/); $data{$key} = $val; } のようにして取得、 if ( $data{'hoge1'} eq 'true' ) などで判断された方がよいかと思います。
- lesstia
- ベストアンサー率45% (44/96)
「Analytics の cookie の名前はすべて _utm から始まり、Analytics とお客様のサイトの間で cookie の名前が競合しないように考慮されています。」 とのことなので、_utm から始まるものを除外してはいかがでしょうか?
補足
_utm から始まるものを除外とは、具体的にどのようにしたら良いのでしょうか? 参考になるURL等載せて頂けるとありがたいです。 よろしくお願いいたします。
補足
色々調べてみて下記のようにしてみました。 local($cookie) = $ENV{'HTTP_COOKIE'}; local(*data, @cookie, $key, $val); @cookie = split(/ /, $cookie); foreach (@cookie) { ($key, $val) = split(/=/); $data{$key} = $val; } if ($data{'hoge1'} eq 'true'){ $AAACookie = 'true'; }else{ $AAACookie = 'false'; } としてみたのですが、[$AAACookie]にfalseが返って来てしまいました。 cookieには、hoge1にtrueが入っている状態です。 どこがおかしいのでしょうか? 何度も申し訳ありませんが、よろしくお願いいたします。