私と同じ問題もありました。多くの時間を費やしてデバッグした後、私は奇妙な解決策に遭遇しました。問題はメタタグにありました。どのように私の問題を解決したか教えてください。
ファイル名:Token.php
<?php
class Token
{
public static function generate()
{
return $_SESSION['token'] = md5(time() . uniqid());
}
public static function check($token)
{
if (isset($_SESSION['token']) && $token == $_SESSION['token']) {
unset($_SESSION['token']);
return true;
} else {
return false;
}
}
}
?>
ファイル名:myscript.php
<?php require_once 'header.php'; ?>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if(Token::check($_POST['token'])) {
echo 'valid token';
// code...
} else {
echo 'invalid token';
}
}
?>
<form action="" method="post">
<!-- other fields -->
<input type="hidden" name="token" value="<?php echo Token::generate();?>">
<input type="submit" value="Submit">
</form>
<?php require_once 'footer.php'; ?>
ファイル名:header.phpの
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Ishtiyaq Husain">
<link rel="shortcut icon" href="#" />
<!-- other css files -->
</head>
これらは私がなっていた値です。
最初のページの読み込み:ページを更新した後
// print old token value from session
echo $_SESSION['token']; //no value
// generate new token
echo Token::generate(); // e72a2f53a25f364e8a2e62e556f7e417
// print new token value from session
echo $_SESSION['token']; // e72a2f53a25f364e8a2e62e556f7e417
:
// print old token value from session
echo $_SESSION['token']; // a63e674d55e9248c25a48856649bf590 //expected value -> e72a2f53a25f364e8a2e62e556f7e417
// generate new token
echo Token::generate(); // 237063c2f7892242c79bfabcd48bcdc8
// print new token value from session
echo $_SESSION['token']; // 237063c2f7892242c79bfabcd48bcdc8
トークンの時点でそれは$ _SESSION [ 'トークン']で新しいトークン値を取得し確認してください。なぜそれは隠された入力ボックスからの値と一致しません。デバッグ後、私はheader.phpからこの行を削除すると動作することがわかりました。 有効な説明はありますか?
<link rel="shortcut icon" href="#" />
などのアイコンのための有効なURLを使用します。
<link rel="shortcut icon" href="http://ishtiyaq.com/images/iLogo.png" />
結果は以下のとおりであった:
最初のページの読み込み:ページを更新した後
// print old token value from session
echo $_SESSION['token']; //no value
// generate new token
echo Token::generate(); // 36e48f2307da7054c67822147878e0c6
// print new token value from session
echo $_SESSION['token']; // 36e48f2307da7054c67822147878e0c6
:
// print old token value from session
echo $_SESSION['token']; // 36e48f2307da7054c67822147878e0c6 //as expected
// generate new token
echo Token::generate(); // 734eaeeb862d4d0d52eea1a292f007ec
// print new token value from session
echo $_SESSION['token']; // 734eaeeb862d4d0d52eea1a292f007ec
あなたのサンプルコードと説明に基づいて、私は間違ったことは何も見ません。提供されていない他のことが起こっているため、完全な推測ゲームになります。 –