[PHP-users 11996] Re: 「他人の情報を表示するサイト」

Yasuo Ohgaki php-users@php.gr.jp
Thu, 05 Dec 2002 08:06:40 +0900


大垣です。

Kiyotaka Doumae wrote:
> ext/session/session.c の
> char *php_session_create_id(PS_CREATE_SID_ARGS) 関数
> 
> でセッションIDを生成していますね。
> 
> ここでは、MD5 digestの種として
> sprintf(buf, "%ld%ld%0.8f", tv.tv_sec, tv.tv_usec, php_combined_lcg(TSRMLS_C
> ) * 10);
> というように時刻(マイクロ秒単位)+乱数に依存して生成しているようです。
*SNIP*
> また、プラットフォーム依存になりますが、一般的なUNIX環境であればdigest
> 生成の種にプロセスIDを付加しておけばいいんじゃないでしょうか?
> 同一時刻にひとつのプロセスが処理できる相手はひとつだけですから。


php_combined_lcgはマルチプロセスサーバー(プロセスをフォームするサーバー)
ではPIDをマルチスレッドサーバーではthread_idを利用して疑似乱数を生成してい
ます。したがって、仮に、micro秒単位で同じ時刻にアクセスしても同じセッション
IDは生成されません。

> どうしても心配な場合、新規に生成したセッションIDが、すでに割り当て済み
> でないかどうかをチェックするようなアルゴリズムを組み込めば確実ですね。

msessionはセッション情報を全てメモリに保持しているのでセッションID
のコリージョンを検出しています。

--
Yasuo Ohgaki