• 締切済み

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]になってしまいます。 回避策等ありますでしょうか?

みんなの回答

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

「hoge1」という名前で発行したクッキーを確認(読み出し)するなら、 if ($ENV{'HTTP_COOKIE'} =~/hoge1=true/){ $AAACookie = 'true'; }else{ $AAACookie = 'false'; } でいいんじゃないですか。 ※この場合、¥は全部要らないです。(付けるのはおかしい)

  • lesstia
  • ベストアンサー率45% (44/96)
回答No.3

if ($data{'hoge1'} eq 'true;'){ のようにしないとだめかも知れません。 cookieの中身を確認してみてください。

  • lesstia
  • ベストアンサー率45% (44/96)
回答No.2

そもそも $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' ) などで判断された方がよいかと思います。

kanumaru
質問者

補足

色々調べてみて下記のようにしてみました。 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が入っている状態です。 どこがおかしいのでしょうか? 何度も申し訳ありませんが、よろしくお願いいたします。

  • lesstia
  • ベストアンサー率45% (44/96)
回答No.1

「Analytics の cookie の名前はすべて _utm から始まり、Analytics とお客様のサイトの間で cookie の名前が競合しないように考慮されています。」 とのことなので、_utm から始まるものを除外してはいかがでしょうか?

kanumaru
質問者

補足

_utm から始まるものを除外とは、具体的にどのようにしたら良いのでしょうか? 参考になるURL等載せて頂けるとありがたいです。 よろしくお願いいたします。

関連するQ&A