session_regenerate_id 後でセッションが空になっている
created: 2010-03-12 23:49 | modified: 2010-03-13 17:39 | reply: 4
[4361] session_regenerate_id 後でセッションが空になっている - ただの課長 - 2010-03-12 23:49- [4362] 現象の再現コード - ゆうじ - 2010-03-13 01:39
- [4363] ありがとうございます - ただの課長 - 2010-03-13 13:57
- [4364] リクエストの送信先の件 - ゆうじ - 2010-03-13 16:59
- [4365] なるほど - ただの課長 - 2010-03-13 17:39
[4362] 現象の再現コード
user: ゆうじ | created: 2010-03-13 01:39
こんばんわ。
不可解な現象を再現出来る最小限のコードがあればいいのですが
とりあえず、想定される動きをする方のコードを書いてみました。
自宅PC の PHP5.2 では動きましたのでお試しください。
これが想定通りの動きをしなければ環境の違いに原因があるかも、
また動くようならこの部分以外のコードに原因がある、
といった具合に切り分けられます。
コードの場合は、現象を再現出来る
最小限のコードを書いてみると原因が絞り込めます。
不可解な現象を再現出来る最小限のコードがあればいいのですが
とりあえず、想定される動きをする方のコードを書いてみました。
<?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 では動きましたのでお試しください。
これが想定通りの動きをしなければ環境の違いに原因があるかも、
また動くようならこの部分以外のコードに原因がある、
といった具合に切り分けられます。
コードの場合は、現象を再現出来る
最小限のコードを書いてみると原因が絞り込めます。
