サブルーチン

クライアント側にcookieを作成するためのルーチン。
保存内容はキャラクターの名前、パスワード、ID、ならびにクッキーの有効期限。

保存されたcookieは cookie_get で読み出すことができる。

ソースコードの解説

sub cookie_set {
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)
					= gmtime(time + 90*24*60*60);

gmtime関数 を使用しcookieの有効期限を定めている。
time(現在時間)+90日×24時間×60分×60秒という具合――よって有効期限は90日間だと分かる。

	$yearg += 1900;

gmtime関数 においても、西暦は1900年からの換算になるので、1900年分を足す。

	if ($secg  < 10) { $secg  = "0$secg";  }
	if ($ming  < 10) { $ming  = "0$ming";  }
	if ($hourg < 10) { $hourg = "0$hourg"; }
	if ($mdayg < 10) { $mdayg = "0$mdayg"; }

秒や時間が1桁だった場合、文字列として2桁に直している。
本来は sprintf関数 を使用するべきで、あまりスマートな方法ではない。

	$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct',
					'Nov','Dec')[$mong];
	$week = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday',
					'Saturday')[$wdayg];

月、週は 0 からの値として返されるので、これを通常のアルファベット表記へ変換している。

	$date_gmt = "$week, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";

expires(有効期限)の内容を指定している。

	$cook="name\:$Fm{'name'}\,pass\:$Fm{'pass'},id\:$Fm{'id'}";

cookieとして保存する情報を指定している。
cookieを読んだときには上記の情報を参照します。

	print "Set-Cookie: SOS2=$cook; expires=$date_gmt\n";
}

上記のフォーマットでcookieを保存するための記述。

キーワード解説

gmtime関数

  • gmtime EXPR
    • EXPR … グリニッジ標準時として返す値。省略可能。

time関数 の値をグリニッジ標準時で返す関数。
EXPRを省略すれば現在時間に、1を代入すれば1970年から1秒経過した時間が返されます。

$a = time;
$b = gmtime;
$c = gmtime(time);
@d = ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = gmtime(time);

上記の場合――

$a = 1269653658;
$b = Sat Mar 27 01:34:18 2010;
$c = Sat Mar 27 01:34:18 2010;
@d = (18, 34, 1, 27, 2, 110, 6, 85, 0);

――という結果になります。

関連項目

コメント

コメントはありません。 Comments/リファレンスマニュアル/サブルーチン/cookie_set?

お名前:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-29 (日) 18:38:33 (142d)