0

私が開発しているログイン クラスで session_regenerate_id を使用することを検討しており、PHP のドキュメントや他のいくつかのサイトを読むと、関数が以前のデータを引き継いで新しく生成された ID を持つ新しいセッションが作成されるようです。 PHP 4.3.2 で追加されました。

PHP 5.1 以降には delete_old_session パラメータがあり、true に設定すると以前のセッションも破棄されますが、以前のバージョンではそうではありません。

私の質問は、5.1 より前のバージョンの PHP を実行しているサーバーで session_regenerate_id を使用する場合、session_regenerate_id を使用して以前のセッションを破棄する最良の方法は何でしょうか?

session_regenerate_id の前に使用すると、以前のセッション データを引き継ぐことができず、使用後に使用すると新しいセッションが破棄されるため、 session_destroy() は機能しないと思います。

4

1 に答える 1

1

これで問題が解決するはずです:

session_start();
// gets current (previous) session
$previousID = session_id();
session_regenerate_id();
// get the new session id
$newID = session_id();
// close session related files
session_write_close();

// set the old session id
session_id($previousID);
// start the old session
session_start();
// clear the old session
session_destroy();
// save the old session state (destroyed session)
session_write_close();

// set the regenerated session id
session_id($newID);
// start the new session
session_start();

これで、古いセッション データが消去され、新しいセッション ID に転送されます。

于 2012-06-14T11:41:40.090 に答える