[PHP-users 20127]Re: session_regenerate_idについて

Reiji Matsumoto matsumoto @ spline.oc.to
2004年 1月 29日 (木) 20:00:32 JST


Matsumoto @ Sp です。
[PHP-users 17602] を書いた者です。
セッション関係でしくじると影響が大きいですよね。
気になったのでphp 4.3.2 および 4.3.3 で追試してみました。
結果は4.3.2においてはMTさんの状況と一緒で、4.3.3では
期待している効果が得られました。


以下のコードを実行し…、

<?php
session_start();
echo session_id();
print "<hr>";
session_regenerate_id();
echo session_id();
?>

IE6でブラウズしスニファリングしてみました所、以下のヘッダが出力されていまし
た。

php 4.3.2の場合
------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Thu, 29 Jan 2004 11:21:41 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.2
X-Powered-By: PHP/4.3.2
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Pragma: no-cache
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=Shift_JIS

44
d1d1ea03b4eb6db74e761ba0ac23da18<hr>94509cd5a24d9f6cf2cb42bea99dd06b
0

php 4.3.3の場合
------------------------------------------------------------------
HTTP/1.1 200 OK
Date: Thu, 29 Jan 2004 11:23:26 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.3
X-Powered-By: PHP/4.3.3
Set-Cookie: PHPSESSID=d1d1ea03b4eb6db74e761ba0ac23da18; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=8f9ab4a54a71f74aa26defa964923415; path=/
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=Shift_JIS

44
d1d1ea03b4eb6db74e761ba0ac23da18<hr>8f9ab4a54a71f74aa26defa964923415
0
--------------------------------------------------------------------
どういうわけか、php 4.3.2 の場合はSet-Cookieヘッダが出力されていません。
それが原因でクライアントサイドに残っている古いセッションIDが再送信されて
いるようです。
ソースまでは追ってないんですが、4.3.2の session_regenerate_id()
はよくないみたいですね。
シリアル化を経由する方法はうまくいくようですので、phpのバージョンを
入れ替えるまでは、当面はそちらを使ってもらった方がいいみたいですね。



PHP-users メーリングリストの案内