令牌会话和帖子令牌始终不同,尽管从相同的参数 [英] Token Session and Post Token always different although from the same paramater
本文介绍了令牌会话和帖子令牌始终不同,尽管从相同的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
/ ***设置表单记号*** /
$ token = md5(uniqid(rand(),true));
/ ***设置会话表单标记*** /
$ _SESSION ['form_token'] = $ token;
并将隐藏的输入放在我的表单中:
< input type =hiddenname =tokenvalue =<?php echo $ token;?> />
但是当我提交页面并比较令牌时,它给了我一个不同的令牌ID。任何人都可以告诉我我做错了什么?
解决方案
确保你只有(重新)生成一个令牌,如果表单不是已提交。
<?php
//处理请求或显示表单
if($ _ SERVER [ '$ REQUEST_METHOD'] ==='POST')
{
//检查我们是否收到一个令牌
if(isset($ _ POST ['form_token']))
{
//比较令牌
if($ _ POST ['form_token'] === $ _SESSION ['form_token'])
{
//在这里做魔术.. 。
unset($ _ SESSION ['form_token']);
} else {
die('No token match');
}
} else {
die('No token found');
}
} else {
$ token = md5(uniqid(rand(),true));
$ _SESSION ['form_token'] = $ token;
//带有隐藏令牌的打印表单..
}
i'm generate a token for my form like this:
/*** set a form token ***/
$token = md5( uniqid(rand(), true) );
/*** set the session form token ***/
$_SESSION['form_token'] = $token;
and put hidden input in my form like this:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
but when i submit the pages and compare the token it give me a different token id. can anyone tell me am i doing something wrong?
解决方案
Make sure you only (re)generate a token if the form is not submitted yet.
<?php
// Process request OR show form..
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
// check if we receive a token
if(isset($_POST['form_token']))
{
// compare the token
if($_POST['form_token'] === $_SESSION['form_token'])
{
// do the magic here...
unset($_SESSION['form_token']);
} else {
die('No token match');
}
} else {
die('No token found');
}
} else {
$token = md5( uniqid(rand(), true));
$_SESSION['form_token'] = $token;
// print form with hidden token..
}
这篇关于令牌会话和帖子令牌始终不同,尽管从相同的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文