ページの装飾に関するTips


・Cookie を使用したアクセスカウンタ

NN2Unknown NN3OK NN4OK MozillaOK IE3Bug IE4OK

通常 JavaScript ではブラウザ側のディスクアクセスはできませんが、 Cookie を使用すればページ内の情報を一時的にディスクに保存することができます。 Cookie カウンタはこの仕組みを利用してクライアントサイドでカウントするアクセスカウンタです。

通常のアクセスカウンタはCGIを利用し、 そのページを参照した延べ人数をカウンタで表現します。

Cookieカウンタはその人(正確にはそのマシン)から、 そのページを参照(履歴の参照も含めて)した延べ回数をカウントします。

以下にコードを示します。

<script language="JavaScript"><!--
// 定数&変数
expireperiod=1000*60*60*24*365;       // 有効期間( msec )
countername ='ShinSoftCookieCounter'; // Cookie名
digits      =6;                       // 表示桁数
count=null;

// Cookie 設定関数
function setCookie(name,value,expire){
  document.cookie
    = name + '=' + escape(value)
    + ((expire==null)?'':('; expires='+expire.toGMTString()));
}
// Cookie 取得関数
function getCookie(name){
  var search = name + '=';
  if (document.cookie.length>0) {
    offset = document.cookie.indexOf(search);
    if (offset != -1){
      offset += search.length;
      end     = document.cookie.indexOf(';',offset);
      if(end == -1)
        end = document.cookie.length;
      return unescape(document.cookie.substring(offset,end));
    }
  }
  return null;
}
// 数字列生成関数
function createDigit(n){
  var ct='';
  var sn=''+n;
  for(var i=0;i<(digits-sn.length);i++) ct+='0';
  return ct+n;
}
// アクセスカウンタ値取得関数
function getCC(){
  if (count == null){
    var today = new Date();
    var expires=today;
    expires.setTime(today.getTime()+expireperiod);
    if((count=getCookie(countername)) == null)
      count=0;
    count++;
    setCookie(countername,count,expires);
  }
  return count;
}
// --></script>

この文字の部分は必要に応じて修正します。

expireperiodは Cookie の有効期限です。 その人が訪れた時に生成した Cookie をどれくらいの期間保存しておくか msec 単位で指定します。

countername は保存する Cookie の名称です。 生成した Cookie が他の Cookie 情報と混在しないように固有の名称を付けます。

digits はカウンタとして表示する際の桁数を数字で指定します。

Cookie カウンタを表示するには getCC関数で取得した数値を createDigit関数 に渡せば 表示用文字列が得られますのでこれを document.write します。
これらの関数の呼出形式を以下に示します。

getCC();
引数なし

createDigit(n);
n : 表示する数値

使用方法

使用方法は簡単です。
BODY部の表示したいところで以下のように記述します。

<script language="JavaScript"><!--
document.write(
   '<p>あなたは'
  +createDigit(getCC())
  +'回目の訪問です<\/p>');
// --></script>

出力する HTML に工夫を凝らせば、通常のカウンタのように見せることもできます。

<script language="JavaScript"><!--
document.write(
   '<table border=0 cellspacing=0 cellpadding=0><tr>'
  +'<th>あなたは <\/th>'
  +'<th bgColor="#000000"><font color="#00ff00">'
  + createDigit(getCC())+'<\/font><\/th>'
  +'<th> 回目の訪問です <code>f(^^;<\/code><\/th>'
  +'<\/tr><\/table>'
  );
// --></script>

サンプルはこちらです。


応用例

ここで挙げたスクリプトは数字列を生成するものですが、 createDigit関数をアレンジすれば簡単に画像にすることもできます。

digitprefix = 'images/d'; // カウンタ用数字画像の接頭文字

// カウンタ画像生成関数
function createDigit(n){
  var s='';
  for(var i=0; i<digits; i++){
    var d=n%10;
    n=parseInt('0'+n/10);
    s='<img src="'+digitprefix+d+'.gif"'
     +' border=0 alt="'+d+'">'+s;
  }
  return s;
}

この文字の部分は必要に応じて修正します。

使用する画像ファイルは例えば d0.gif, d1.gif, ... d9.gif と言う具合に 表示する数値を含むファイル名で、 digitprefixは 画像ファイルの数値部分までのパスを含む文字列を指定します。

createDigit関数内の .gif は 同様に数値以降の文字列を指定します。


注意事項

caution
ブラウザ側でCookieを受付けた時警告するように設定してあると ( 通常はこの設定かもしれません (^^; )、 このページを開く度に警告のダイアログが表示されます。
caution
expireperiodで指定した期間このページをアクセスしないと、 それまでアクセスした回数を忘れてしまいます。
Internet Explorer3.02J Internet Explorer4.01SP1
JavaScript のコード自体は問題ありませんが、 Cookieを設定する際、指定した期限がダイアログに表示され、 期限がグリニッチ標準時になっているようです。 あまりシビアな期限の指定は避けた方が良いでしょう。

Copyright(c) 1998 - 2001 ShinSoft. All rights reserved.