スレッド表示 | フラット表示〕 全トピック 910 件中 4 番目 次≫ ≪前

session_regenerate_id 後でセッションが空になっている

created: 2010-03-12 23:49 | modified: 2010-03-13 17:39 | reply: 4

[4362] 現象の再現コード

user: ゆうじ | created: 2010-03-13 01:39
こんばんわ。

不可解な現象を再現出来る最小限のコードがあればいいのですが
とりあえず、想定される動きをする方のコードを書いてみました。

<?php
/**
* index.php
*/
error_reporting(E_ALL);
session_save_path('/home/userdir/tmp/sess');
session_start();

if (!isset($_SESSION['sha1'])) {
header('Location: http://localhost/form.php');
exit();
}
?>
<p>session_id: <?php echo session_id(); ?></p>
<p>sha1(session_id): <?php echo sha1(session_id()); ?></p>
<p>$_SESSION[sha1]: <?php echo $_SESSION['sha1']; ?></p>
<p><a href="form.php">Login form</a></p>

<?php
/**
* form.php
*/
error_reporting(E_ALL);
session_save_path('/home/userdir/tmp/sess');
session_start();

?>
<p>session_id: <?php echo session_id(); ?></p>
<p>sha1(session_id): <?php echo sha1(session_id()); ?></p>
<?php if(isset($_SESSION['sha1']) && is_string($_SESSION['sha1'])): ?>
<p>$_SESSION[sha1]: <?php echo $_SESSION['sha1']; ?></p>
<?php else: ?>
<p>$_SESSION[sha1]: (none)</p>
<?php endif; ?>
<form action="http://localhost/login.php" method="post">
Name: <input type="text" name="name" value="">
<br>Pass: <input type="password" name="pass" value="">
<br><input type="submit" value="Send">
</form>

<?php
/**
* login.php
*/
error_reporting(E_ALL);
session_save_path('/home/userdir/tmp/sess');
session_start();

if ('hoge' !== $_POST['name'] || 'hoge' !== $_POST['pass'] ) {
if (isset($_SESSION['sha1'])) {
unset($_SESSION['sha1']);
}
header('Location: http://localhost/form.php');
exit();
}

session_regenerate_id(true);
$_SESSION['sha1'] = sha1(session_id());
header('Location: http://localhost/index.php');
exit();
?>

自宅PC の PHP5.2 では動きましたのでお試しください。
これが想定通りの動きをしなければ環境の違いに原因があるかも、
また動くようならこの部分以外のコードに原因がある、
といった具合に切り分けられます。

コードの場合は、現象を再現出来る
最小限のコードを書いてみると原因が絞り込めます。
Parent: 4361  reply: 4363 返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 910 件中 4 番目 次≫ ≪前
ページの一番上へ
twitterでつぶやく Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑