PHP+MySQL+cookie(セッション管理)にてアクセス解析を構築しております。
仕組みとしては、サイトにアクセスがあった場合に
session_start()にてPHPSESSIDを発行し、DBに記録して
以降の行動をPHPSESSID毎にユーザーを特定して記録しております。
この時、DBにはcookieを有効にしたアクセスは
直接「123123abcd123123abcd123123abcd12」の形で記録され
逆にcookieが無効(?)の場合は「PHPSESSID=123123abcd123123abcd123123abcd12」
という形で記録されております。
(”isset($_COOKIE["PHPSESSID"])”にて判定しています。)
cookieが有効の場合、1セッション内の行動であれば
一度記録したPHPSESSIDにてユーザーを特定することができ、問題ないのですが
cookieが無効の場合だと、PHPSESSIDは発行されますが
URLにパラメータとして持たせ続けないと、その行動が
どのユーザーのものか特定できないと思います。
また、アクセス解析を見てみると、結構cookieを無効にした
ユーザーからのアクセスも多く、無視できない数字でした。
ここで質問ですが、
1.「PHPSESSID=123123abcd123123abcd123123abcd12」の形で
記録されているものはcookieが無効のアクセスと考えていいですか?
2.cookieが無効の場合、上記の値を保持し続ける
良い方法があれば教えて下さい。(サイト内で)
No.3ベストアンサー
- 回答日時:
追加質問についてです。
>(1)どこからアクセスしてきたか
情報はリファラ値しかありませんので、operaみたいに、適宜リファラ送信をoffにしたり、プロキシの設定によっては消したりされるので、そういうアクセスでは、情報が取れないのは致し方ありません。
社内ネットワークからだとプロキシ操作が行われていることもあると聞きます。
JavaScriptでimgタグを出力するタイプのアクセス解析では、JavaScriptのrefererrをurlのqueryに付けるので、こちらは通常消されることはないので、両方仕掛けておいて、IPアドレスやcookieで同一アクセスかを判断し、情報の有る方を記録となるでしょうか。
JavaScript offの場合は、この情報も取れませんが、一般ユーザーでは、少数派と思います。よって、検索ロボット以外でどっちにもrefererがないのは、おおむね、お気に入りからか、url直接入力と考えてよいでしょう。
検索ロボットは、JavaScript出力の画像にアクセスしてくるのは稀です。
>(2)顧客の注文金額はいくらか
通常、注文時は、ログインするとか、誰でもが勝手に注文送信したりはできないようにしますよね?
そのときには、「cookieを有効にして下さい」といった注意を促せば、きちんとcookie sessionで情報が取れると思います。
お節介かもしれませんが、掲示板の迷惑投稿と同じように、注文フォームにもいろいろ攻撃がきますので、webセキュリティについては、十分御注意下さい。
No.2
- 回答日時:
cookie off と記録されるアクセスについて追加です。
画像でのアクセスログではなく、phpでページ出力時のアクセスログだと、cookie off の閲覧には、検索エンジンのデータ収集もありますね。googlebotは結構頻回に来ます。
あと、携帯とかも、まだcookieに対応してないのもあるようですし。
検索エンジンのアクセスは、browser名に、検索エンジン名(googlebotとかyahoo slurpとか、なんとかspiderとか)が入ってるので、一般ユーザーとの区別がつきます。
前回の回答時は見落としてたけど、$_COOKIEにデータがセットされているかによるチェックだと、初回訪問時もデータ無しですね。cookieはonでも、1頁だけ見て去っていく場合は、session cookie は取得できないと思います。
アクセスログとしてどのデータを集めるかは目的次第でしょう。
cookie on の時の情報は、精度が高いと言うより、一般の多くの人はcookie on でアクセスしているし、いちいち消さないので、cookie期限を30日とか、すこし長く設定すると、再来ユーザーの動向を探りやすいといったところでしょうか。
通常session用のcookieは、ブラウザを終了すると消す設定ですが、同一sessionでどれくらい複数のページにアクセスがあるかをみるなら、現行の方法でもよいかもしれません。
この回答への補足
2度にもわたり、回答頂いて誠に有り難うございます。
仰るとおりsession cookieだけだと、確かにそうなりますね。。
クライアントのcookieに値を埋め込む形の方が良さそうですね。
もしよければ続けて質問させてください。
このアクセス解析の真の目的は、購入ページからメールを送った
顧客が、(1)どこからアクセスしてきたか(2)顧客の注文金額はいくらか
を計測したく、自作で構築している次第です。
また(1)の部分に関しては大きく分けて
(a)KW広告(b)検索エンジン(c)お気に入り(d)他サイトからのリンク
の4種類です。
(a)に関しては、広告特有のパラメータをwindow.locationで拾えますので、判定可能です。
(b)・(d)は(a)以外のアクセスでリファラ値に含まれる文字列を拾って判定します。
(c)はリファラ値が空のもので判定します。
ただ、検索ロボットの事を考慮してなかったので、
それを除外するロジックは組み込まないといけませんね。
この目的の場合、cookieが有効なアクセスについて上記の(1)(2)を記録する
有効な方法は何か良い方法がありますでしょうか。
No.1
- 回答日時:
session id は、cookieに持たせるか、URLにパラメータとして持たせるかの2つしか方法はないでしょう。
ユーザー特定だけなら、IPアドレス($_SERVER["REMOTE_ADDR"])でも出来そうですけど?
同一session内では通常同一IPアドレスです。
常時接続のユーザーなら、過去のセッションも同一IPアドレスとなりますけど、アクセス間隔で判るでしょう。
電話回線からのインターネット接続ならsessionは維持しながら、IPアドレスは変わると言うこともありうるけど、現在はごく少数でしょう。
>結構cookieを無効にしたユーザーからのアクセスも多く
私も情報見るだけの時は、cookieは切ってます。ここの質問掲示板も回答を付けるためにログインするときだけcookieを送信に切り替えます。
ちょっとでもセキュリティに関心のあるユーザーならたぶん皆そうするでしょう。
この回答への補足
なるほど、確かにIPアドレスを使えば、ある程度絞り込む事は
可能だとおもうのですが、例えば企業内のパソコンなどから
アクセスしてきた場合、原則同じIPアドレスになってしまいますよね。
またどこの資料を見ても、完全にユーザーを特定することは難しいと
書いており、その意味もわかるのですが、
どちらかの方法で、ある程度は妥協するしかないのですね。。
どこかにWebalizer(でしたっけ?)はIPアドレスにて、
GoogleAnalyticsはcookie発行型と書いていました。
IPの方が数が多く記録されるとあったので、cookieの方が精度が
高いのかなと思い、cookieを選びなんとかcookieで、と思った次第です。
回答誠に有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Chrome(クローム) Cookieを削除 他サイトでの自動ログインなどの設定も削除されますか パソコン クロームです 1 2022/09/10 21:47
- PHP PHPで訪問回数を表示するカウンタを作成したい 3 2023/05/27 07:09
- その他(ブラウザ) 最近、いろいろなブラウザでログインができません。 2 2022/03/29 00:04
- その他(ソフトウェア) ロイロノート(アプリ版)のログインができません。 2 2022/09/04 21:07
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- サーバー クッキーをサーバー側で管理することで攻撃に備える 1 2022/08/11 03:49
- Chrome(クローム) google earth PROをクリックすると下記の表示がされPROが開きません 2 2022/07/28 10:25
- その他(ソフトウェア) FierFox 99.0.1(64ビット) で 時々 Cookie情報が消えます 4 2022/05/03 05:42
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(ブラウザ) このページは動作していません HTTP ERROR 401 2 2022/11/28 12:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cookieにカンマ区切りでつめこ...
-
ブラウザ間でCookieを共有する...
-
クッキーがセットされない
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
Line Inputにて改行があっても...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
DataGridViewの特定列に入力さ...
-
[VBScript][wsh]byte単位でのデ...
-
バイト列とバイナリ列の違いが...
-
3バイト文字(UTF-8)をprintfで...
-
ビットスワップとバイトスワッ...
-
int型(2バイト)データの分割
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
COleDateTime とtime_t
-
異なるドメインのサイトでcooki...
-
PHPのCookieが有るか無いかで、...
-
PHPの可変変数で数字部分を演算
-
ブラウザ間でCookieを共有する...
-
ログインに関するフラグについて
-
クッキーが消せない
-
cookieが無効のブラウザへの対...
-
なんでブラウザでPHPを動かすた...
-
クッキーの発行と取得
-
cURLでcookieを送受信する方法...
-
現在日時から、任意の時日時を...
-
クッキーを連想配列で扱う方法...
-
PHPで違うサーバーのスクリプト...
-
javascriptでcookieを削除するには
-
cookieにカンマ区切りでつめこ...
-
一度回答した人をはじくアンケ...
-
Perlのフリーソフトの掲示板
-
LWP::Simple;でWebページを取得...
-
ゲームノベルのような分岐のあ...
おすすめ情報