• 締切済み

PHPのセッションIDについて

PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

みんなの回答

noname#244856
noname#244856
回答No.1

<a href="up.php">初めからカウントする</A> は <a href="up.php?PHPSESSID=XXXXX">初めからカウントする</A> のように実際は表示されているはずです。 同じSIDを受け取っているから当然と言えば当然の挙動ですよね。 対策としてはsession_regenerate_id関数ぐらいでしょうか。 http://php.net/manual/ja/function.session-regenerate-id.php

freeradical
質問者

お礼

ありがとうございます。

freeradical
質問者

補足

教えていただいた方法を試してみて、セッションIDが変わることを理解できました。 ただ、ご指摘にもあるとおり、PHPSESSID=XXXXの形式でクエリー文字としてUELに付くので、それも無しにしたいなあと思い、いろいろ試してみたところ、session_start()とsession_destroy()を同じページに書かなければ良いことに気づきました。 つまり、reset.phpの引き継がれたセッションを表示する部分と、セッションを破棄する部分を別なphpファイルに分けたのですが、これにより、session_regeneratte_id()を使わなくても、セッションIDが変わりました。