【发布时间】:2018-03-27 22:37:38
【问题描述】:
好的,看来有人已经遇到了这个问题,但我不知道答案将如何适用于我。我没有发现任何标签在我的编码中放错了位置。一旦我到达 index.php,我的令牌就设置好了,但它改变了它转到 validate.php。我早上让它工作,但后来又回来确保我做对了,所以我可以加载它,因此我的工作落后于计划,现在它不起作用。我使用 if(!isset(session)) set sec_token 在同一个 index.php 中进行了所有编码,但由于某种原因它停止了工作。然后我把它拆分成这些文件清理一下,还是不行。
我做错了什么,或者我怎样才能找到错误以防止这种情况发生? - 令牌更改是 - 我尝试了所有其他答案,但没有一个奏效。如果我能得到一些帮助,我会很高兴,提前谢谢你。
PHP session variable changes between pages
//index.php
<?php
session_start();
//在这个文件中我有 random_text();没有别的功能
require_once 'token.php';
//设置token变量
$token = random_text();
//会话现在将拥有令牌
$_SESSION['sec_token'] = $token;
//现在会显示token
echo $_SESSION['sec_token'];
?>
HTML 代码开始 -->
<!DOCTYPE HTML>
<HTML>
<HEAD>
<title>Token</title>
</HEAD>
<BODY>
<HEADER style="text-align:center;">
<h1>Token</h1>
</HEADER>
<main>
<div style="text-align:center;">
validate.php 是我们验证令牌的地方。 -->
<form action="validate.php" method="POST">
<h2>enter what ever</h2>
<input type="text" name="info"><br><br>
<button type="submit" name="test" style="display:inline-block;">Test
Token</button>
<div style="width:2.5%; display:inline-block;"></div>
这是放置令牌的隐藏输入-->
<input type="hidden" name="token" value ="<?php echo $token; ?>">
</form>
</div>
</main>
<FOOTER>
</FOOTER>
</BODY>
</HTML>
//验证.php
<?php
session_start();
//这将再次回显令牌以确保保持不变。
echo $_SESSION['sec_token'];
//这里我们设置安全变量 $有效 = 假;
//这里确保设置了会话令牌和发布令牌
if(isset($_SESSION['sec_token']) && isset($_POST['token']))
{
if($_SESSION['sec_token'] == $_POST['token'])
{
$valid = TRUE;
}
//如果为 false 会破坏会话,如果你愿意,可以跳过。
if($valid == FALSE)
{
//取消所有会话变量。
session_unset();
如果要终止会话,请同时删除会话 cookie。 注意:这将破坏会话,而不仅仅是会话数据!
if (ini_get("session.use_cookies"))
{
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]);
}
最后,销毁会话。
session_destroy();
$_SESSION = array();
exit("<h1>This Web-Site keeps track of IP Address, and attempts
against it!<br> An Alert has been Sent, and it will be investigated!
</h1>");
}
//如果为真,那么它应该做交易!
elseif($valid == TRUE)
{
echo $_POST['info'].'<br>';
echo 'It Worked!'
}
}
}
【问题讨论】:
-
将两个文件(整个)都发布到 pastebin 以便于调试。
-
这是与所有三个 .php 文档的 pastebin 的链接 如果看到我看不到的东西,请告诉我。 link@Karlo Kokkak 我相信我提到过我是这样的,但它停止了工作。也尝试计数请求.. 我只得到一个.. 例如 1,2,3 如果我的令牌是由
if(!isset($_SESSION['sec_token']))set sec_token 生成的,我什至会放置其他位置,并且不知何故它会跳过它并仍然给我一个令牌值。我确保它全部被摧毁,但它仍然没有完成这项工作。 @Lotfio Lakehal -
将 index.php 替换为:pastebin.com/h3aFZPvv