发布

时间:2018-03-27 22:37:38

标签: php session

好的,所以似乎有人已经有了这个问题,但我看不出答案如何适用于我。我的编码中没有发现任何标签错位。我到达index.php后设置了我的令牌,但它改变了它到validate.php。我让它在早上工作,但后来回到它,以确保我正确,所以我可以加载它,因为这个我落后于我的工作的时间表,现在它不起作用。我在同一个index.php中编码,使用 if(!isset(session)) 设置sec_token,但由于某种原因它停止工作。然后我将它拆分成这些文件以清除它,它仍然无效。

我做错了什么,或者如何找到防止这种情况发生的错误? - 令牌改变 - 我已经尝试了所有其他答案,但都没有奏效。如果我得到一些帮助,我会很高兴,谢谢你。

PHP session variable changes between pages

//的index.php

<?php
session_start();

//在这个文件中我有random_text();没有其他功能

require_once 'token.php';

//设置令牌变量

$token = random_text();

//会话现在将有令牌

$_SESSION['sec_token'] = $token;

//现在令牌将显示

echo $_SESSION['sec_token'];
?>

HTML CODE STARTS - &gt;

<!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是我们验证令牌的地方。 - &GT;

<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>

以下是放置令牌的隐藏输入 - &gt;

<input type="hidden" name="token" value ="<?php echo $token; ?>">
</form>

</div>
</main>

<FOOTER>
</FOOTER>

</BODY>
</HTML>

// validate.php

<?php
session_start();

//这将再次回显令牌以确保保持不变。

echo $_SESSION['sec_token'];

//这里我们设置安全变量     $ valid = FALSE;

//这里确保设置会话令牌和发布令牌

if(isset($_SESSION['sec_token']) && isset($_POST['token']))
{
if($_SESSION['sec_token'] == $_POST['token'])
{
$valid = TRUE;
}

//如果为false则会破坏sesion,如果愿意,可以跳过此步骤。

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>");
}

//如果为True,那么它应该进行交易!

elseif($valid == TRUE)
{
echo $_POST['info'].'<br>';
echo 'It Worked!'
}
}
}

1 个答案:

答案 0 :(得分:0)

感谢你们两位帮助我,但是我注意到我的计数大部分时间是从1开始,偶尔它会在到达页面时以0值开始。当它以0开始计数时,它可以正常工作,但当它以1开始时,则会弹出错误。但是从那里继续计数继续1,2,3,4 ...但是我也注意到在多次运行期间,会话的令牌在1次计数之后根本没有改变。所以,这解释了为什么How to properly add CSRF token使用else语句。它是这种bug的捕手。所以一旦你到达,如果不是页面上的0计数,那么其他人会抓住它。如果是第一次计数为0。然后它应该工作得很好,else语句被忽略。所以,我刚刚使用了捕手。 “其他”

我更愿意真正知道为什么会去1计数,而不是从0开始...无论如何......无论如何谢谢你,抱歉你的时间。