ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

超初心者向けCGI講座コミュのベーシック認証ログインユーザー名表示、ゲスト表示

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして色々サイトで調べてある程度わかり自分なりに書いたんですが
ちょっとスランプになってしまったので書き込みさせていただきます。

現在KENTWEBさんのベーシック認証CGIでパスワード制限させていただいてます。
で、トップにベーシックで認証したユーザー名とサイトアクセスログ(メンバーと未登録者ゲスト)表示したいのです。
例、
未登録者の場合
ようこそ、GESTさん今日5回目の訪問です。

登録者の場合
ようこそZIMAさん5回目の訪問です。

これ+ログをとり登録者は、何時にサイトに来たかをログ取ってTOPに乗せたいのです。
ゲストの場合は1時間ごとにしか同じホストまたは、IPはログしない様なやつを作りたいのです。
一応自分がKENTWEBさんのところを参考にして書いたCGIを乗せておきます。


以下CGIの内容

/home/httpd/user/member.dat内部
GEST<>GESTUSER<>MAIL<>MEMO<>  ←ログインID名、ユーザー名、メール、メモ

/home/httpd/user/member.datからIDを確認し$ENV{'REMOTE_USER'}と一致する場合
$my_name = $namに置き換える。  ←$namは、ユーザー名

置き換えた$my_nameを$date(時間)と一緒に/home/httpd/user/pwlog2.datに保存する。
保存したデータを印字させる(繰り返し)

簡単に説明すると、ユーザーIDをユーザー名に変えて、時間とユーザー名をログして
ログを表示する。って流れです。
しかし、認証ページ内じゃないと$ENV{'REMOTE_USER'}が使えないので、認証ページ外では、
ユーザー名を習得できません。習得できない場合は以下が結果として出てきます。
(すべて、SSIで表示させます。)

習得できた場合
GESTUSER<>時間
出来ない場合
<>時間
時間しか習得してもらえません。どなたかアドバイスお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ユーザーアクセス情報(訪問回数無し)
#!/usr/bin/perl


# 会員ファイル
# → 正確にフルパスを記述すること
$memfile = '/home/httpd/user/member.dat';

open(IN,"$memfile") || &error("Open Error: $memfile");
while (<IN>) {
($id,$nam,$eml,$memo) = split(/<>/);
if ($ENV{'REMOTE_USER'} eq $id) { $my_name = $nam; }
}
close(IN);
print "Content-type: text/plain\n\n";
print "$my_name ID番号$ENV{'REMOTE_USER'}\n";
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ログ表示CGI

#!/usr/bin/perl
# アクセスログの最大数
$log_max = 8;

$gest = "GEST";
# 時間取得
$date = &get_time;


# 外部用アクセスログファイル
# → 正確にフルパスを記述すること
$axsfile2 = '/home/httpd/user/pwlog2.dat';


# 会員ファイル
# → 正確にフルパスを記述すること
$memfile = '/home/httpd/user/member.dat';


sub get_time {
# タイムゾーン設定
$ENV{'TZ'} = "JST-9";

local($min,$hour,$mday,$mon,$year) = (localtime(time))[1..5];
sprintf("%d/%d-%02d:%02d",
$mon+1,$mday,$hour,$min);
}

open(IN,"$memfile") || &error("Open Error: $memfile");
while (<IN>) {
($id,$nam,$eml,$memo) = split(/<>/);
if ($ENV{'REMOTE_USER'} eq $id) { $my_name = $nam; }
}
close(IN);


# ログファイルの読み込み
open(IN,"$axsfile2") || &error("Open Error: $axsfile2");
@data = <IN>;
close(IN);



# ログ調整
while ($log_max <= @data) { pop(@data); }
unshift(@data,"$my_name<>$date<br>\n");

# 更新
open(OUT,">$axsfile2") || &error("Write Error: $axsfile2");
print OUT @data;
close(OUT);


print "Content-type: text/plain\n\n";
print "@data";


長文になってしまいましたが、よろしくお願いします。

コメント(6)

なるほど、保持して外部から呼び出す場合はどういった書き方になるのでしょうか?
内部で保持して内部で表示なら分かりますが^^;
詳しくお願いします。
教えてもらったサイトを参考にして書いてみましたが、だめでした。
ゲスト表示(googleなどで表示してるような)
トップのhtmlでの表示はやはりベーシック認証では無理なんでしょうか・・・

自分がやりたいのは、TOPに訪問者のログと訪問者のユーザー名表示です。
ログインしてない(メンバー以外)場合の制限は
1、メンバーページにいけない
2、ようこそ、のところがゲスト
3、ログが、ゲストになっており1時間ことにしか同じホストはログ取らない


メンバーでの特権
1、メンバーページ(パスワード制限ページ)閲覧
2、ログにアクセスした時間をすべてログする。
3、ようこそ、のところが登録したメンバー名表示

メンバー名とは、KENTWEBさんのベーシック認証CGIを使って
登録したときのDATに保存されるものです。
また、以下の事ができる物があれば教えていただきたいです。

すみませんが、自分CGI始めたばかりで初歩的な質問
などしてしまうかもしれませんが、よろしくお願いします

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

超初心者向けCGI講座 更新情報

超初心者向けCGI講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング