環境変数について

[上に] [前に] [次に]
クーポン拳 1999/08/27(金) 11:33:34
サーバはLinuxです。
現在、とほほさんのwwwcount.cgiを設置してみたんですが、アクセスログをメールで受け取るように設定しました。環境変数、REMOTE_ADDRにはLAN内のどのPCからインターネットに接続しても同じアドレスがふられているのでPCごとのアドレスを取得するように、HTTP_X_FORWARDEDを使ってアドレスを取得しようとしたのですがなにも表示されません。

なぜHTTP_X_FORWARDEDには何も入っていないのでしょうか?

それと、HTTP_REFERERには上記のサーバにあるホームページのアドレスしか入りません。例えば、外部のホームページを見て上記のサーバにあるホームページを見てもHTTP_REFERERには何も入っていないんです。
どうしてなのですか?教えてください。

moci [E-Mail] 1999/08/27(金) 14:13:48
HTTP_X_FORWARDED ではなく、HTTP_FORWARDED か
HTTP_X_FORWARDED_FOR に何がしか入ってませんか?

とりあえず全ての環境変数を書き出してみるのも手かと。

> それと、HTTP_REFERERには上記のサーバにあるホームページのアドレスしか入りません。例えば、外部のホー
> ムページを見て上記のサーバにあるホームページを見てもHTTP_REFERERには何も入っていないんです。
> どうしてなのですか?教えてください。

設置方法がCGIかSSIか、カウンタを設置したページが
フレームの中になっていないかどうか、確認に使ったWWWブラウザが
何かが分かれば、原因を推測することができるかもしれません。

クーポン拳 1999/08/27(金) 15:09:26
設定方法はSSIです。
フレームには入っていません。
確認に使ったブラウザはIE5とNs4.04です。

下記はスクリプトの一部です。

#$referer = $ENV{'HTTP_REFERER'};
#$referer =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex$1))/eg;
#$reffile =~ s/\\//g;

#open(OUT,">>$access_file");
#print(OUT "TIME=[$today,$time]\n");
#print(OUT "COUNT=[$access]\n");
#print(OUT "ADDR=[$ENV{'REMOTE_ADDR'}]\n");
#print(OUT "HOST=[$ENV{'REMOTE_HOST'}]\n");
#print(OUT "AGENT1=[$ENV{'HTTP_USER_AGENT'}]\n");
#print(OUT "AGENT2=[$ENV{'HTTP_X_FORWARDED_FOR'}]\n");
#print(OUT "FROM1=[$referer]\n");
#print(OUT "FROM2=[$reffile]\n");
#print(OUT "USER=[$ENV{'REMOTE_USER'}]\n");
#print(OUT "SERVER=[$ENV{'SERVER_NAME'}]\n");

アクセスログにIE5だと以下のようになっています。
#TIME=[99/08/27,14/54/47]
#COUNT=[カウント数が入っている]
#ADDR=[アドレスが入っている]
#HOST=[]
#AGENT1=[Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)]
#AGENT2=[]
#FROM1=[]
#FROM2=[]
#USER=[]
#SERVER=[hogehoge.co.jp]

アクセスログにネットスケープ4.04だと以下のようになっています。
#TIME=[99/08/27,14/55/41]
#COUNT=[カウント数が入っている]
#ADDR=[アドレスが入っている]
#HOST=[]
#AGENT1=[Mozilla/4.04 [ja] (Win95; I ;Nav)]
#AGENT2=[]
#FROM1=[]
#FROM2=[]
#USER=[]
#SERVER=[hogehoge.co.jp]

>HTTP_X_FORWARDED ではなく、HTTP_FORWARDED か
>HTTP_X_FORWARDED_FOR に何がしか入ってませんか?
やってみましたが変わりませんでした。
どのような原因が考えられるのでしょうか?

それと、すべての環境変数を求めるにはどうするのですか?
教えてください。

ふじ 1999/08/27(金) 15:22:09
>すべての環境変数を求めるには
foreach (keys %ENV){
print "$_ = $ENV{$_}\n";
}
とか、
while (($key, $val) = each %ENV){
print "$key = $val\n";
}
とか。

クーポン拳 1999/08/27(金) 16:02:54
ふじさんのforeach文を使ってすべての環境変数を求めてみましたが、
PCごとのアドレスは見つかりませんでした。
PCごとのアドレスを取得にはどのようにすればよいのでしょうか?

教えてください。

moci [E-Mail] 1999/08/27(金) 16:22:48
どの環境変数にも入っていないのであれば、普通は
取得することはできません。プロキシの設定の方で
HTTP_FORWARDED等を付けるようになっていないのでしょう。

> 例えば、外部のホー
> ムページを見て上記のサーバにあるホームページを見ても

まさかとは思いますが、最初のページを表示して、単に
ブックマークやお気に入りで目的のページを表示しただけと
いうことはありませんか?
同じサーバ上でも構わないので、リンクをたどってカウンタの
あるページを表示しないと、本来HTTP_REFERERは付かないものです。

クーポン拳 1999/08/27(金) 16:37:36
となると、とほほさんのwwwcount.cgiの同アドレスチェック機能なんかは使えないって事ですよね。
何か良い方法は無いんでしょうか?
教えてください。

とほほ 1999/08/28(土) 01:35:52
wwwcount.cgiの改造が必要ですが、Cookieを用いて、PC毎に個別のID
を発行して、このIDをキーにしてチェックすることはできるかも。
(Cookieの受け取りをオフにされていたら問題あるけど・・・)
Cookieに関する詳細は、下記のページをどうぞ。
http://www.tohoho-web.com/wwwcook.htm

[上に] [前に] [次に]