[PHP-users 670] セッションIDを生成する仕組みについて

Series php-users@php.gr.jp
Thu, 12 Jul 2001 16:02:01 +0900


はじめて投稿するシリーズと申します。

PHP4のセッション管理について質問があります。

PHP4にてセッション管理を行う場合、 session_start();
という関数を使うことによってセッションが開始
されるということが分かりました。

---
Perlの『CGIプログラミング』第二版という本の
311ページの例には、

use Digest::MD5;

my $md5 = new Digest::MD5;
my $remote = $ENV{REMOTE_ADDR} . $ENV{REMOTE_PORT};
my $id = $md5->md5_base64( time, $$, remote);
$id =~ tr|+/=|-_.|; #非ワード文字をURLに使える文字に変換

といったような形で紹介されているコードがありますが、
この場合は、環境変数のリモートアドレスとリモートポート
を詐称して、まったく同時にアクセスした場合には同じ
セッションIDを取り出すことができるということになると
思います。
----

現在php4のセッションIDの関数を利用してセッション管理を
行うプログラムを書いています。Perlによる上記例のように
同じセッションIDをとられないようにするためには、sesson_start()
に推測されないフレーズを引数として与えたいのですが、その方法が
わからないのです。

また、なんらかの原因によって用意したsession_destroy()を走らせな
かった場合、一定の時間が経過したあとに自動的にセッションを破棄
させたいのですが、これは可能でしょうか?

少々神経質な質問で申し訳ないのですが、分かる方がいたらご教授の
ほど、お願いいたします。

------
※PHP4がデフォルトで生成するsession_start()で生成される
セッションIDは、本当にユニークなIDと考えてもよいのでしょうか?