令牌会话和帖子令牌始终不同,尽管从相同的参数 [英] Token Session and Post Token always different although from the same paramater

查看:207
本文介绍了令牌会话和帖子令牌始终不同,尽管从相同的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  / ***设置表单记号*** / 
$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆