• 締切済み

アクセス解析を作ってます。クッキーについて

お世話になっております。 只今、アクセス解析を作っておりまして、クッキーの意義を見直したく質問させて下さい。 と、申しますのも、以下のようなスクリプトを設置しているのですが、殆どの人が初めての訪問者として認識してしまう状況となっております。 #IDと時刻などを登録などを登録する訪問者用テーブル(access_visitorテーブル)と、そのIDを含め訪問したURLや時刻などの詳細を登録するテーブル(analyzerテーブル)を設置しています。 if(!isset($_COOKIE["user_id"])){//初めての訪問者だったら、access_visitor_TBに登録。そしてuser_idを登録&取得   //access_visitorテーブルに登録し、   //その登録したIDを含め、訪問したURLや時刻などをanalyzerテーブルに登録 }else{//再訪問者だったら   $user_id = addslashes($_COOKIE["user_id"]);//このuser_idは、 access_visitorのIDを指しています。   $visit_date = $_COOKIE['visit_date'];//前回訪問時刻     $sql= "select * FROM access_visitor WHERE user_id = '$user_id'";     $result = mysql_query($sql);     $rows = mysql_num_rows($result);     if($rows == 1){       //analyzerテーブルにデータ登録     }else{      //念のため、ここでもaccess_visitorテーブルに登録し、      //その登録したIDを含め、訪問したURLや時刻などをanalyzerテーブルに登録     } } //クッキーセット setcookie("user_id", $user_id, time() + 60*60*24*30*12, "/"); setcookie("visit_date", $date, time() + 60*60*24*30*12, "/"); 以上のような感じですが、どこか不適切なところはありますでしょうか? 何度も作りかえ、現在に至っておりますが、上記のようなスクリプトだと、殆どの方にクッキーをセットすることが出来ず($_COOKIE["user_id"]を取得できず)、初めての訪問者として処理されてしまいます。 お忙しいなか恐縮ですが、ご指摘など頂戴出来れば幸いです。宜しくお願い致します。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

まずは、cookieの仕組みの基本知識を得るのが先決かとも思います。 http://www.futomi.com/lecture/cookie/index.html

参考URL:
http://www.futomi.com/lecture/cookie/index.html
mayu_chap
質問者

お礼

こんばんは。お世話になっております。 参考になるサイトをお教えいただき、有難う御座います。 クッキーの知識をもう少し深めてから、再度質問いたします。有難う御座いました。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

setcookieの前に、改行などの文字が出力されていると、そこでheader送信は完了してしまうので、cookieにセット出来ません。 この場合、setcookie() はエラーは出さずに、falseを返すだけなので、 if(! setcookie(略) ){ echo "header送信済み、cookie不可"; } の様にチェックしてみて下さい。 buffering を行うようにすれば、この手の間違いは、吸収されるのだけど。 http://jp.php.net/manual/ja/function.setcookie.php 「注意」の項目参照

mayu_chap
質問者

お礼

hrm_mmmさんへ こんばんは。お休みの中、ご親切な回答をありがとう御座います。 >setcookieの前に、改行などの文字が出力されていると、そこでheader送信は完了してしまうので、cookieにセット出来ません。 そうでした。 実は今回作っているものは、別のドメイン(サーバ、htmlファイル)でも利用出来るよう、よく見かける無料で利用できるアクセス解析のように、<script src='http://~>といったソースを貼ることで解析出来るようなものを考えていたのですが、この場合(設置する場所により文字の出力が行われてしまう)は、どのようにすれば宜しいのでしょうか。 実際に設置するために作ったソースは、 <script language="JavaScript"> <!-- document.write("<script src='http://www.○○○.com/script/analyzer.php?id=1&ref="); document.write(document.referrer+"&url="); document.write(document.URL+"' />"); // --> </script> こんな感じです。 引続きアドバイスを頂戴出来れば幸いです。