ユーザーにはcookieを利用して専用のカウンタを所有してもらい、それを利用してレベル(称号や役職)を与えて、カウンタのアップ=レベルのアップの楽しみを提供します。
そのcookieデータを集計し、管理者は常連のユーザーの実状を把握することができるようになります。
パスワードは登録内容の変更や削除に必要になります。
メールアドレスはパスワードを忘れたときにパスワードをメールで受け取るために必要です。(sendmailが使える場合)
レベルはカウントが増えたときにその表示を変更する機能で、役職やランクが上がったことを分かりやすく伝えるために使用します。
【パーミッションの設定】
member_count、member.scv、mail_listは「777」に設定し、それらを保存するディレクトリも「777」に設定します。
その他のファイルは「755」に設定します。
この他、以下のファイルが自動的に作られます。
member_count.lock(ロックファイル)・・・ロック中のみ
member_list.bak(バックアップファイル)
member_list.error(エラーログファイル)
1行ごとに会員の登録データが記録されます。
自動バックアップや管理人の手動バックアップ操作ができます。
データの削除は管理人のみ可能です。会員も自分の登録情報を抹消できますが、会員名簿に表示されない仮抹消の状態となります。
(例) | 1,秀麗,1000,会長,----,shurey@dammy.ne.jp,dammy.ne.jp,954551873,0 2,はるぼう,100,A会員,0000,harubow@dammy.ne.jp,dammy.ne.jp,954506844,0 |
登録内容:
会員番号、登録名、カウント、レベル名称、パスワード、メールアドレス、アクセス時間、ステータス
会員番号:登録順に付けられていきます。
登録名:会員が登録時に入力します。
カウント:会員毎にカウントを行います。カウンタ表示のときにカウントを上げて行きます。
レベル名称:カウントに応じて自動的に付けられます。member.cgi内で設定します。
パスワード:会員が登録時に入力します。登録の変更やcookieの修復操作に必要です。(非公開)
メールアドレス:パスワードを忘れたとき、会員がパスワードをメールで受け取るために必要です。(非公開)
アクセス時間:最終のデータ更新時間(time形式)
ステータス:通常は「0」。パスワードの入力を間違えるとその回数が記録され、一定以上(初期値3)になると更新禁止(受付拒否)となる。更新禁止は「5」。仮抹消は「6」。
1行ごとにメール送信を実行したデータが記録されます。
メール送信は制限時間内に繰り返すことができないようにするため、この記録ファイルを参照しています。
会員数を超えた行と制限時間x10の時間を経過したデータは自動的に削除されます。
(例) | 2,harubow@dammy.ne.jp,mk-000.dammy.ne.jp,954494712 |
登録内容:
会員番号、メールアドレス、アクセスホスト名、アクセス時間
会員番号:パスワード要求時に入力した会員番号。
メールアドレス:パスワード要求時に入力したメールアドレスで、member_listに登録されたメールアドレスと同じもの。(パスワードの代わりに使います)
アクセスホスト:パスワード要求を実行した利用者の特定情報。
アクセス時間:メール送信時間(time形式)
カウントを行いcookieを更新するCGIファイル。
他のCGIファイル内に組み込んでカウンタを機能させるパーツとして使用してください。
動作の流れは次のようになっています。
1 | 初期設定 | 各変数を設定します。 |
2 | cookie読込 | cookieを読み込みます。 |
3 | カウントアップ | カウントを1つ足します。 |
4 | cookie設定 | cookieを変数に設定します。 |
5 | カウンタ表示 | カウンタの表示と共にcookieを書き込みします。 |
カウンタの表示が要らない場合、5の手順をcookieの書き込みだけに置き換えます。
(削除) | &count_view; |
(追加) | print "Set-Cookie: $s_cookie\n"; print "location: index.html\n\n"; |
変数、サブルーチン名は組み込み先に同じものがある場合は変更しなければなりません。また、初期設定はサブルーチンに組み込めば変数を使わなくて済みます。
SSIを使用できる環境の場合、「<!--#exec cgi="count.cgi"-->」を任意のHTMLファイルに記述することでcount.cgiのカウンタ画面を挿入することができます。
管理人がページを呼び出したとき(cookieの会員番号が初期設定の管理人番号と同じ場合)にのみ表示される。
管理人の入室、退室、データのバックアップが可能。(「退室&解錠」ボタンは退室が未処理の場合のみ表示されます)
「入室&施錠」ボタンを押すと、管理人室の画面に切り替わります。
「エラーログ閲覧」ではエラーログを画面に表示します。
「バックアップ」は会員名簿のファイルを複製します。
会員登録がまだのとき(cookieがないかcookieの会員番号が0である場合)に表示されます。
登録名、メールアドレス、パスワードを入力すると、登録完了画面が表示されます。
会員登録ができたとき(cookieがある場合)に表示されます。
会員番号とメールアドレスが表示されています。(これは登録したメールアドレスを常に確認できるようにするためです。)
パスワードを入力し、「登録内容確認」ボタンを押すと変更確認の画面になります。
登録内容の内、名前、メールアドレス、パスワードの変更が可能です。レベル名称の変更が許可されている場合、レベル名称の変更が可能になります。
会員名簿表示画面が表示されます。
この操作は会員以外でも可能です。
cookieが消失した場合など、member_listに登録した内容をcookieに書き出します。
仮抹消の会員情報も修復することができます。
「修復」ボタンを押すと内容確認の画面が表示されます。
会員がパスワードを忘れた時に自身が登録したメールアドレスにパスワードを表記したメールを送って受信することができます。
会員番号とメールアドレスをmember_listの内容とチェックして、一致した場合のみ送信を行います。
また、一度送信を行うと制限時間($mailtime)内に同じ操作は受け付けません。
送信されるメールの内容は編集可能です。
送信後、送信完了の画面が表示されます。
$sendmail を空白(ヌル)に設定するとこの項目は表示されません。
その場合、mail_list、jcode.plのファイルは不要です。
会員情報を会員名簿に保存します。
トップページでカウントし、名簿に保存していますが、途中や最後に保存をして置きたいときに使います。(会員ページ内でカウントを加算し、会員ページ出口でその情報を記録したいときなど)
会員番号 | 登録名 | カウント | レベル | パスワード | メールアドレス | ホスト | 最終アクセス | ステータス | |
---|---|---|---|---|---|---|---|---|---|
1 | 秀麗 | 1000 | 会長 | ---- | shurey@dammy.ne.jp | dammy.ne.jp | 2000/04/15 | 11:43:32 | |
2 | はるぼう | 100 | A会員 | 0000 | harubow@dammy.ne.jp | dammy.ne.jp | 2000/04/13 | 11:37:59 |
入室後は他の会員の操作はロックされます。必ず退室を行わなければ、ロックは解除されませんので注意してください。
number | name | count | level | pass | host | date & time | status | mode | error | ||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 秀麗 | 1000 | 会長 | 5555 | shurey@dammy.ne.jp | mk-000.dammy.ne.jp | 2000/04/15 | 11:02:02 | 5 | CHANGE | 8 |
「number,name,count,level,password,mail,host,date,status,time,mode,error」
各会員情報は入力時に(member_listからではなくcookieから)受け取ったものを記録しています。
下のような表が表示されます。
会員番号 | 登録名 | カウント | レベル | ホスト | 最終アクセス | |
---|---|---|---|---|---|---|
1 | 秀麗 | 1000 | 会長 | dammy.ne.jp | 2000/03/31 | 21:15:55 |
2 | はるぼう | 100 | A会員 | dammy.ne.jp | 2000/03/31 | 16:22:52 |
会員番号 | 2 |
登録名 | はるぼう |
カウント | 100 |
レベル | A会員 |
「修復」ボタンを押すと表示された内容がcookieに保存されます。
index.html | 一般的なホームページの窓口として使用する。 METAタグやアンカータグでCGIを呼び出す。 |
↓ | |
member.cgi | オプションを指定してカウンタを表示する。 内部でtop.htmlを呼び出し、その中にカウンタを埋め込む。 |
↓↑ | |
top.html | トップページとして機能するページ。 |
No.1 | 秀麗 | 1000 points | 会長 |
モード | URL | カウンタ 表示 | カウント アップ | member_list 更新 | cookie 更新 | 表示画面 |
---|---|---|---|---|---|---|
カウント | member.cgi?mode=COUNT | 有/無 | 有/無*1 | 有/無 | 有/無 | member.cgi |
ビュー | member.cgi?mode=VIEW | 有/無*2 | 有/無*1 | 有/無 | 有/無 | top.html + member.cgi |
トップ | member.cgi?mode=TOP | 有/無*2 | 有/無 | 有/無 | 有/無 | top.html + member.cgi |
top.html | 有/無 | 有/無 | 有/無 | 有/無 | top.html | |
count.cgi*3 | 有/無*4 | 有/無 | 有/無 | 有/無 | count.cgi |
(*1)ファイルロック時はカウンタの表示、cookieの更新は行われますが、member_listは更新されません。
(*2)top.html内の埋め込み文字列「<!--counter-->」の有無によります。
(*3)SSIを使えば任意のHTMLファイル中にカウンタを表示できます。
(*4)標準では有になっています。
URL: member.cgi?mode=COUNT
フレーム内で使用するときなどカウンタだけのページを表示するときに使う。
URL: member.cgi?mode=VIEW
top.htmlにカウンタを組み込んだ画面を表示。
カウントアップを行うため、index.htmlから初めてトップページを表示するときに最適。
カウンタの表示は、top.htmlに「<!--counter-->」を埋め込むことでその部分に表示される。
URL: member.cgi?mode=TOP
カウンタは表示するが、カウントアップは行わない。
カウンタが何度も上がるのを防ぐためにindex.html以外のページからトップページを呼び出すときに使用する。
カウンタの表示は、ビューモードと同じくtop.htmlに「<!--counter-->」を埋め込む。
URL: top.html
トップモードでカウンタを表示しないときと同じなので、こちらを使用してください。
その際には規定値設定の$toplinkを書き換え忘れのないようにしましょう。
# トップページへのリンク $toplink = "<FORM ACTION='$top_file'><INPUT TYPE=submit VALUE='トップページへ'></FORM>"; (または) $toplink = "<A HREF='$SN' TARGET='_top'>トップページへ</A>"; |
URL: count.cgi
カウントアップを行い、cookieの更新をするために使用します。
中のプログラムを他のCGIに組み込んだり、表示部を変更して使用してください。
ファイル名を変更し、複数の表示内容のページを作ることもできます。
SSIを使用できる環境の場合、「<!--#exec cgi="count.cgi"-->」を任意のHTMLファイルに記述することでcount.cgiのカウンタ画面を挿入することができます。
管理人が管理室に入っている間や他の誰かがファイルを開いて書き込みをしている間に、他者がファイルの書き換えに関する操作をできないようにする機能です。(ファイルの破壊を防いでいます。)
ロックファイルは$member_countで設定されたファイル名に「.bak」を付けたものになります。
会員名簿のファイルを読み込む前にロックファイルを作成し、ファイルの書き出し後、ロックファイルは削除されます。
ロックファイルには通常ロックファイルを作成した時間(time形式)が入ります。管理人の操作によるロックの場合は「KANRI」と文字列が記録されています。
ロック解除ができなかった場合、通常のロックなら$locktimeで指定した時間(標準は60秒)が経過すると自動的に解除されます。(解除のタイミングはmember.cgiを読み込んだとき)
しかし、管理人の行ったロックは自動解除されず、管理人が退室処理を行った場合にのみ解除されます。
管理人ロック中は、受付画面に「管理人ロック中」と表示されます。
通常のロック中は、受付画面での表示はありません。
ロック中に名簿の更新を伴う操作を行った場合、ロック中のため操作できないとエラーメッセージが発生します。
いたずらでパスワードを解除しようとするのを防ぐ目的で一定回数以上のパスワード操作を禁止する機能です。
パスワードのチェックが必要な操作を行ったとき、各会員のステータス値に+1します。
ステータスが$passtimeで指定した回数(標準は3回、最大5回)入力を間違うとステータスは5に設定されます。この状態が更新ロックです。
更新ロック状態になると、パスワードのチェックが必要な操作を受け付けなくなり、エラーメッセージを表示します。
更新ロックは$mailtimeで指定した時間(標準24時間)を越えると自動解除されます。また、正当な会員(cookieに正しいパスワードが残っている場合)がカウンタを表示した場合(カウントモード、ビューモードでmember.cgiにアクセス)にも自動解除されます。
いたずらにメールを送信する機能を利用されないようにするため、連続での操作ができないようになっています。
パスワード要求操作後、$mailtimeで指定した時間(標準24時間)が経過すると自動的に解除されます。
会員は自分の登録情報をcookieと会員名簿から抹消することができます。
また、$deltimeで指定した日数を経過すると自動的に仮抹消となります。これは不用意な会員登録に対する処置です。
仮抹消の会員情報は管理人のみ管理室で見ることができます。
仮抹消となっている会員の制限事項を以下にまとめます。
【制限事項】
・カウントされない
・会員名簿に表示されない
【可能な操作】
・修復処理(元の会員に戻ります)
・メール要求処理
### 初期設定 ###
# 会の名称
$party = "○○○○の会";
このプログラムを使用する会の名称です。# 名簿の名称
ページのタイトルに表示されます。
一覧表を表示するときなど、名簿の名前を表示します。# cookieの名前(利用中に変更しないでください)
会員が登録した名称を保管するcookieの名称。途中で変更すると全会員のcookieが使用不能になり、会員でなくなってしまいます。# cookieのpath(使用範囲)
cookieのパス設定です。「/」はそのサーバー全体から呼び出すことができることを示します。# cookieの期限(日)
同じサーバー内で同じ名前のcookieがあると上書きされてしまうため、使用範囲を個人のホームページの中やディレクトリの中だけに限定するために使用します。
「/directory」ならURLで表す「www.xxx.co.jp/directory」の中という意味です。
cookieには一定の期間が過ぎると自動的に削除される機能が備わっています。# 管理人の会員番号とパスワード
期間経過後、受付画面から「登録内容修復」を行うことで、会員名簿のmember_listから読み込んでcookieを登録し直すことができます。
管理人番号は途中で管理人を変えたいときに変更してもかまいません。#記録用ファイル名(必ず変更してから使ってください)
管理人はmember_listに登録されたパスワードを使用しません。管理人のパスワードは必ずこちらで設定したもので認証を行います。
会員名簿を記録するファイル名。# 連番ファイル名
ディレクトリ名をファイル名の前に付けることができます。
バックアップファイル(.bak)やエラーログ(.error)には、このファイル名の後ろに拡張子を付加しています。
会員数を記録するファイル名。# トップページ
カウンタを埋め込んで表示するために、member.cgiに読み込んで使用するファイル。# 会則・注意事項のページ
新規ウインドウを開いて会の規則や注意事項の書いたページを表示するためのファイル。# <BODY TEXT=$textcolor LINK=$linkcolor ALINK=$alinkcolor VLINK=$vlinkcolor BGCOLOR=$backcolor>
会員登録時に参照してもらうために別ファイルとした。
ページを構成する色を設定します。# <TABLE BGCOLOR=$tablecolor>
各モードにおいて統一した色を表示するために使用します。
テーブルを構成する色を設定します。# 警告文字色
警告文やレベルアップ時に目立たせる部分に使用する文字色を設定します。# レベル名称の自由選択の許可(Yes=1/No=0)
レベルが一定以上に達した場合、会員がレベル名称を自由に変更することを許可することができます。# sendmailのパス(メール送信を利用する場合)
各レベル名称の設定はサブルーチン内で、カウントとレベル名称の対応を行っていますので、変更するには簡単なプログラムの修正が必要です。
パスワードを忘れた場合にメールでその通知を受けるための機能を提供します。# メール発信記録ファイル
sendmailが使えない場合は、パスを空欄にしてください。受付画面から「パスワード要求」の項目がなくなります。
メールを要求した会員、メールアドレス、時間を記録するファイル。# ロックの解放時間(秒)
同じ会員からのメール要求は規定値によって制限しています。
通常のロックはmember.cgiを呼び出して、画面の表示が終わった時点で解除されています。# パスワード失敗処理回数(1-5)
しかし、何らかの不具合でロック解除が行えなかった場合、設定時間経過後は自動的にアンロックするように設定しています。
この設定が短いと、動作の遅いサーバーの場合、一連の作業中にロックが自動解除されてしまいますので、呼び出してから画面が表示されるまでの十分な時間(10倍以上の余裕)を設定してください。
パスワードを設定回数失敗して入力するとデータの入力を受け付けなくします。(更新拒否)# ユーザー制限時間(時間)
正しい会員番号とパスワードがcookieに入っている場合にカウンタを動かせば、自動的に解除されます。
メール要求を行った会員が再要求可能になるまでの時間やパスワード失敗時の更新拒否状態を自動解除するまので時間を設定します。# 自動抹消の間隔(日:0=しない)
会員登録をしても最後のアクセスから指定の日数が経過した場合にステータスを「6」に自動設定し、仮抹消とします。# 自動バックアップの間隔(日:0=しない)
会員名簿(member_list)を定期的にバックアップします。
経過日数後、member.cgiが起動した時にバックアップが作成されます。
「0」の場合、バックアップはしません。
その他、管理人が受付画面からバックアップを指示することもできます。
絶対に変更しないでください。# カウンタ置換文字列
top.htmlに記述し、カウンタ表示のために置換対象となる文字列です。# cookie の初期値=(会員番号、名前、カウント、レベル、パスワード)
$c_level以外は変更しないでください。# トップページへのリンク
$c_levelは非会員のレベル名称を設定しています。(標準では表示はされません)
トップページへ戻るリンクを設定します。# エラーログ
3つのパターンを用意してありますので、どれか1つを選択し、必要に応じて変更して使用します。
1つ目のタイプは、トップページへ戻るボタンを表示し、TOPモード(カウンタ表示・カウントなし)でトップページを表示します。
2つ目のタイプは、トップページのHTMLファイルを呼び出しています。(フォーム内で使用)
3つ目のタイプは、ボタンを表示しないタイプでTARGETの設定が必要な場合に使います。フォームの中からフォームのトップへ切り替えています。
エラーメッセージを残すログファイル名。
$member_listで指定したファイル名の後ろに「.error」を付加するように設定されています。
### レベル確認 ### sub set_level { # 管理人の確認 if ($k_number == $c_number) { $level_check = 2; } else { $level_check = 0; # 各レベル名の設定 local($temp) = "E会員"; if ($c_count >= 10) {$temp = "D会員";} if ($c_count >= 25) {$temp = "C会員";} if ($c_count >= 50) {$temp = "B会員";} if ($c_count >= 100) {$temp = "A会員";} if ($c_count >= 200) {$temp = "C役員";} if ($c_count >= 300) {$temp = "B役員";} if ($c_count >= 400) {$temp = "A役員";} if ($c_count >= 500) {$temp = "S役員";} # レベル名自由変更の許可 if ($c_count >= 1000) { if ($level_free == 1) {$level_check = 2;} } # 役職変更の有無 if ($level_check < 2) { if ($c_level ne $temp) {$level_check = 1; $c_level = "$temp";} } } } |
最も低いレベルを$tempに設定し、現在のカウントを小さい数字から比較して最終的に該当した条件文から$tempを受け取ります。
現時点のレベル名称と条件から受け取った$tempを比較し、変更が合った場合は$level_checkを使って変更があったことを次の処理(カウンタの表示など)に伝えています。
変更が可能な部分はレベル名称、各条件のカウント数、条件の行数、レベル名自由変更の許可を行うカウント数です。
sub send_ok { # sendmail起動 if (open(MAIL,"| $sendmail $c_mail")) { print MAIL "To: $c_mail\n";
$c_sub = "[$party] パスワードの通知"; # メール本文 print MAIL "--------------------------------------------------------\n"; print MAIL "TIME : ".localtime($LT)."\n"; print MAIL "HOST : $get_host\n"; print MAIL "NAME : $c_name\n"; print MAIL "--------------------------------------------------------\n"; print MAIL "$com\n"; close(MAIL); } |
$c_subはメールタイトル。$comはメール本文に追加する日本語部分です。
$c_sub、$comはjcode.plを使ってjisコードに変換してから送信本文に組み込んでいます。そのためメール本文送出部分(上記の後半)ではそれ以外は英文字しか使えません。
送信されるメールは次のようになります。
-------------------------------------------------------- TIME : Fri Mar 31 18:25:12 2000 HOST : dammy.ne.jp NAME : はるぼう -------------------------------------------------------- 「○○○○の会」よりパスワードのお知らせです。 (このメールは会員登録のあったメールアドレスへ自動的に送信しています。) はるぼう 殿のパスワードは「0000」です。 わがままファーム 管理人 秀麗(shurey@dammy.ne.jp) |
TIME、HOST、NAMEは処理を操作した時の情報です。他の会員が操作した場合、NAMEにその人の名前が入ります。HOSTも同様。
管理人の名前とメールアドレスはmember_listから自動的に取得します。
2次配布は認めませんが、各自で自由に改変して利用することはできます。
CGIの性質上、必要な改変もありますが、それによって正常な動作ができなくなる恐れもあります。使用者は各人の責任において使用しなければなりません。
このプログラムにおいていかなる損害が発生しようとも著作権者は関知いたしませんことをご承知ください。