Webページの来訪者を一意に識別する方法

このQ&Aのポイント
  • Webで有料情報提供サービスの構築を考えているCGI初心者です。IDとパスワードを発行して、顧客管理をしようと考えていますが、顧客のパソコンを一意に識別してIDが正規に発行されたものかどうかをチェックするロジックをさがしています。
  • 同一プロバイダ、アクセスポイントを使用することを条件に、ページの来訪者のPCを一意に識別することはできるのでしょうか?
  • 以下の情報にはそれぞれ問題がありますので、何か良い方法があったら教えてください。REMOTE_ADDR 毎回変わってしまう(上位2Byteは不変?)、REMOTE_HOST 毎回変わってしまう(プロバイダ名の部分は不変?)、REMOTE_IDENT 無い場合が多い、REMOTE_PORT 毎回変わってしまう、REMOTE_USER 無い場合が多い、HTTP_ACCEPT ブラウザのバージョンに依存、HTTP_ACCEPT_LANGUAGE jaしかない、HTTP_FORM ない場合が多い
回答を見る
  • ベストアンサー

Webページの来訪者を一意に識別する方法

Webで有料情報提供サービスの構築を考えているCGI初心者です。(非エロ系) IDとパスワードを発行して、顧客管理をしようと考えていますが、複数人数でIDを使い回されては困るので、顧客のパソコンを一意に識別してIDが正規に発行されたものかどうかをチェックするロジックをさがしています。 同一プロバイダ、アクセスポイントを使用することを条件に、 ページの来訪者のPCを一意に識別することはできるのでしょうか? 以下の情報にはそれぞれ問題がありますので、何か良い方法があったら教えてください。 REMOTE_ADDR 毎回変わってしまう(上位2Byteは不変?) REMOTE_HOST 毎回変わってしまう(プロバイダ名の部分は不変?) REMOTE_IDENT 無い場合が多い REMOTE_PORT 毎回変わってしまう REMOTE_USER 無い場合が多い HTTP_ACCEPT ブラウザのバージョンに依存 HTTP_ACCEPT_LANGUAGE jaしかない HTTP_FORM ない場合が多い

  • CGI
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • inoue64
  • ベストアンサー率29% (334/1115)
回答No.1

>パソコンを一意に識別して Cookieを使う方法があると思います。

参考URL:
http://tohoho.wakusei.ne.jp/wwwcook.htm
hyperbird
質問者

補足

ご回答ありがとうございます。ご教示いただいたページは大変参考になりました。 クッキーを使用すると比較的簡単にできそうです。 この他、クライアントのコンピューター名とかHDDのボリュームシリアルナンバーを読み出すことはできないのでしょうか?

関連するQ&A

  • 一意なID

    コンピュータ内でなるべく不変で一意な値を組み合わせて、ネットワーク上でほぼ確実に一意な識別子を作りたいと思います。 ユーザー名やコンピュータ名だけでは一意性に欠けるので、ユーザーIDとOSシリアルナンバー、MACアドレスなども足したいのですが、それらは何を参照すればいいのでしょうか? レジストリのパスや関数名などあれば教えてください。 ユーザーIDはHKEY_USERS\S-?-?-??-???・・・に入っていますが、たまにここに複数あって、どれが自分のIDなのかわかりません。 MACアドレスもNICが複数刺さっている場合のプライマリの検出方法など。 ほかにもここに挙げたもの以外に、何かできるだけ一意で不変なものがあったら、教えてください。 IPなど頻繁に変わる可能性があるものはだめです。 開発環境 XP Pro SP1 + VB.NET 言語はVB.NETですが、これに依存しない手段でもかまわないのでVBのカテゴリには入れてません 実行環境 2000またはXP

  • 一意(ユニーク)かつ、ソートに対してランダムなIDの発行方法

    随時増加するあるデータに対して、一意なIDを割り当ててゆきます。 通常は、1, 2, 3, … と連番を割り当てて行けば一意なIDになると思います。 その上で、IDでソートした時に発行順に並ぶのではなく、順番がランダムになるようにしたいのです。 (アルゴリズムを知らない人から、発行順を推測されないようにしたい。) そこで考えたのが、"1", "2", "3", …という文字列に対するハッシュ(SHA1やMD5)ですが、sha1("1"), sha1("2"), sha1("3"), …とIDを発行していった場合、IDが重複してしまう可能性を心配しています。(とても低い確率ではあることは分かっていますが、皆無ではありません。) ハッシュ関数を利用する他に、「一意」で「ランダム」で「衝突の可能性がゼロ」である文字列の生成方法はありませんでしょうか?(可能性がゼロというのは物理的に不可能だと思うので、例えばSHA-1であれば、160bitのハッシュが生成されますが、2^160個のIDを発行しても重複しない、ということを考えます。) 一応、規模は1000万ID程度を考えていますが、もっと大きなオーダーでも衝突しないに越したことはありません。

  • 一意のプレーヤーIDを…とは?

    いつもお世話になっています。 さて、少し、怪しげな動画サイトを誤ってクリックしましたら、Windows Media Player10のサイトが開き、プライバシーの項目を何も考えずにクリックして後、動画再生が始まりました。 後から確認しますと「一意のプレーヤーIDをコンテンツのプロバイダーに送信する。」にチェックを入れたか入れないかという点が思い出せず、少し不安になっています。 そもそも「一意のプロダクトIDを…」とはどういう意味でしょうか。 また、仮にこれにチェックを入れて動画再生した場合、動画運営サイトから何か言ってくる恐れがございますでしょうか。 プレーヤーIDを送信したからと言って、個人を特定はできないのではと思いますが如何なものでしょう。 小心者にお知恵を貸してください。

  • ActiveBasic コンピュータの個別のID(?)を取得したい

    昔、本か何かで、『コンピュータには識別のIDのようなものがある』ということを読んだ記憶があり、それを取得したいと思います。 このIDというものは、不変で、コンピュータ1台1台違うものが発行(?)されるとか・・・ とりあえず、コンピュータを識別したいのです。 やり方をご存知の方がいらっしゃいましたら、ご教授下さい。 Win XP AB 4.23.00

  • squid の設定で IP を隠したい

    現在、TurboLinux6.0でsquidを使ってプロキシサーバーを動かしています。 http://www.taruo.net/e/?TARGET= のようなサイトで調べてみると下記のように情報 が出てしまいます。 REMOTE_HOST 202.****.***.210  REMOTE_ADDR 202.***.***.210  HTTP_REFERER (none)  HTTP_USER_AGENT . Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) HTTP_ACCEPT . application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, */* HTTP_ACCEPT_LANGUAGE . ja HTTP_HOST . www.taruo.net その他の情報 HTTP_X_FORWARDED_FOR . unknown HTTP_VIA . 1.0 proxy.yuntaku.com:730 (Squid/2.4.STABLE1) HTTP_CONNECTION . keep-alive  HTTP_CACHE_CONTROL . max-age=259200 掲示板などに接続もとがでるものがありますよね。それに書き込むとIPが書かれてし まいます。 これを何とか隠したい(又は別の名前にしたい)のですが、何か方法は無いのでしょ うか?

  • 会員制ページ(サイト)の作り方

    会員制ホームページ(パスワードとIDを発行し、会員にしか見れなくするページ)というのはどうやって作るのでしょうか? CGIでアクセス制限ができるものがあると聞いたのですが、フリーでありますでしょうか。 また、それで作った場合、ロボット検索にも確実にひっかからず、ページ内で掲示板等設置してもそこも会員以外来訪できなくすることが出来るのでしょうか? 初心者ですみません、分かり易く教えていただけたら嬉しいです。

    • ベストアンサー
    • CGI
  • プロキシ経由で「Matzにっき」にアクセス不可

    当方の職場では,回線提供者がそれぞれ異なる2台のプロキシのどちらかを選んでWebアクセスをすることができます。 Rubyの開発者まつもとゆきひろ氏の「Matzにっき http://www.rubyist.net/~matz/ 」にアクセスすると,プロキシA経由では「HTTP/1.0 200 OK」と正常に閲覧できるのですが,プロキシB経由だと「HTTP/1.0 403 Forbidden」となり閲覧できません。 ちなみに「診断くん http://taruo.net/e/ 」にアクセスすると次のように表示されます(抜粋。ドメイン名やIPアドレスは仮定値です) プロキシAの場合 REMOTE_HOST proxy1.example.com REMOTE_ADDR 123.45.67.89 HTTP_VIA . 1.0 proxy2.example.com:8080 (squid/2.5) プロキシBの場合 REMOTE_HOST 98.76.54.321 REMOTE_ADDR 98.76.54.321 HTTP_VIA . 1.0 linux1.example.com:3128 (Squid/2.3) 【質問】 ・このトラブルの原因について何かヒントを思い当たる方がいらっしゃいましたらぜひ教えてください。 ・プロキシBが逆引きできていないのが原因かな?と私は予想したのですが,そういう事例について解説しているURLがあれば教えていただきたいです。 いただいたヒントを理解した上で,当社のネットワーク管理をしている業者に連絡を取ってみようと考えています。

  • SQLiteでたまにアクセスログが取れない

    PHPが使えないサーバーにあるホームページのアクセスログを取得するため、 JavaScriptを使ってPHPが使えるレンタルサーバーに飛び、 PHP+SQLite2でアクセスログを集計していました。 最近パソコンを買い替えたのを機にPHPをVersion 5.4.8にアップデートしたところ、 ローカル環境でSQLite2が使えなくなり、この際pdo_sqliteにプログラムを書き換えました。 レンタルサーバーではSQLite2 がまだ使えるため、以前のプログラムはそのままにして SQLite2 とPDO両方でログをとってみました。 するとSQLite2では取れているのにPDOでは取れていない、 逆にPDOでは取れているのにSQLite2では取れていないログがあることに気が付きました。 (詳しくは下記の画像をご覧ください 赤丸がついているものが他方にはないログです) https://box.yahoo.co.jp/guest/viewer?sid=box-l-oolzr4jkzfiedw4zavuldosoha-1001&uniqid=12bc9230-5e96-41fb-b00e-271a1aa79397&viewtype=detail#du%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ds%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26tu%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ts%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26vt%3Dpublic%26lf%3Dlist%26ls%3D1%26lm%3D20%26il%3D1 何が問題なのでしょうか? プログラム? SQLite? PHP? サーバー? 閲覧者のブラウザ? また回避法をご存知でしたらご教授願います。 (log.js) ref =document.referrer; var qword=""; if(ref.indexOf("?")!=-1){ ref2=ref.split("?"); query=ref2[1].split("&"); qword="?qword="; for (i=0; i<query.length; i++){ qword+=query[i]+"*"; } ref=ref2[0]; } document.write('<script src=" http://○○○/log2.php?ref='+ ref + qword +'"></script>'); document.write('<script src=" http://○○○/log.php?ref='+ ref + qword +'"></script>'); (log.php) <?php $referer = stripslashes($_GET['ref']); $d=date_create(); $date=date_format($d,"Y/m/d"); $time=date_format($d,"H:i:s"); $day=date_format($d,"w"); $referer=sqlite_escape_string($referer); $url=sqlite_escape_string($_SERVER['HTTP_REFERER']); $accept_language=sqlite_escape_string($_SERVER['HTTP_ACCEPT_LANGUAGE']); $remote_addr=sqlite_escape_string($_SERVER['REMOTE_ADDR']); $user_agent=sqlite_escape_string($_SERVER['HTTP_USER_AGENT']); $db=sqlite_open("log.sqlite"); $sql="INSERT INTO log_table ( log_date, log_time, log_day, log_url, log_referer, log_language, log_remote_addr, log_user_agent) VALUES( '$date', '$time', $day, '$url', '$referer', '$accept_language', '$remote_addr', '$user_agent')"; sqlite_query($db,$sql); sqlite_close($db); (log2.php) <?php $referer = stripslashes($_GET['ref']); $d=date_create(); $date=date_format($d,"Y/m/d"); $time=date_format($d,"H:i:s"); $day=date_format($d,"w"); $db=new PDO("sqlite:/home/○○○/www/log.sqlite3",null,null); $referer=$db->quote($referer); $url=$db->quote($_SERVER['HTTP_REFERER']); $accept_language=$db->quote($_SERVER['HTTP_ACCEPT_LANGUAGE']); $remote_addr=$db->quote($_SERVER['REMOTE_ADDR']); $user_agent=$db->quote($_SERVER['HTTP_USER_AGENT']); $sql="INSERT INTO log_table ( log_date, log_time, log_day, log_url, log_referer, log_language, log_remote_addr, log_user_agent) VALUES( '$date', '$time', $day, $url, $referer, $accept_language, $remote_addr, $user_agent)"; $res=$db->prepare($sql); $res->execute(); $db=null; レンタルサーバーの環境 さくらインターネット PHP Version 5.2.17 Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e SQLite 2.8.17 pdo_sqlite 3.3.7

    • 締切済み
    • PHP
  • 主キーの変更

    次のようなテーブルが存在します。レコードはあくまで参考の値です。主キーについては必ず一意の値になるようにしています。 代理店sample1がIDを紛失し、再発行を依頼された場合や,その下の顧客店やこきゃくがIDを紛失し、再発行をする場合に既存のデータをそのまま保持したまま主キーだけを変更して関連された他のテーブルに一斉に反映させるにはどうすればよいでしょうか? ここには記載していませんが顧客店IDやこきゃくIDに関連する別テーブルが10ほど存在します。 主キーが存在するレコードと重複していないかをまずチェックしてそこから基礎となるテーブルに書き換えを行いと考えているのですが、思考がそこで止まってしまっています。 よろしければアドバイスをよろしくお願いいたします。 代理店テーブル |代理店ID(主キー) |代理店名| |        aaaaa | sample1| |        bbbbb | sample2| 顧客店テーブル |代理店ID(主キー) |顧客店ID(主キー)|顧客店名| |        aaaaa |      a-00001| ○○1店| |        aaaaa |      a-00002| ○○2店| |        bbbbb |      b-00001| △△1店| |        bbbbb |      b-00002| △△2店| 顧客テーブル |顧客店ID(主キー) |      こきゃくID(主キー)| こきゃく名| |        a-00001|    a-20071015-00001| Aさん   | |        a-00002|    a-20071015-00002| Bさん   | |         b-00001|     b-20050915-00001| Cさん   | |        b-00002|    b-20050915-00002| Dさん   |

  • Windowsメールの設定方法

    vistaを使っていて、Windowsメールを始めて立ち上げ、メールの設定をしているのですが、受信メールサーバー(POP?とかかいてあったような)、送信メールサーバー、アカウント、 パスワードやらを入力しなければならないようです。 これらはどうやら「使っているプロバイダから発行されているものを入力する」らしいのですが、何も発行されていません。何を入れればいいんですか? ちなみに私はgooのフリーメールを使っていて、アドレスはそこで取得したものを入れました。この私の場合は、「使っているプロバイダ」とはgooになるのでしょうか?だとすると、そこから受信メールサーバとかアカウントとかメールパスワードとかを発行、というか確認すればいいのでしょうか?gooのサイトを見てみたけど、そのようなものが発行されている気配はありません。メールにログインするときのIDやパスワードとはまた別ですよね?さっぱりわかりません。