php – 会话变量在提交表单时更改值.
发布时间:2020-12-13 22:26:19 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试将CS??RF令牌添加到我的表单中.问题是当我在文件中添加它时,我回显出会话令牌,它匹配名为’token’的输入中的令牌.但是,当我提交页面并使用Token :: check时,它返回false,如果我再次从输入和会话中回显令牌值,我会看到会话值已更改但输入值保持不
我正在尝试将CS??RF令牌添加到我的表单中.问题是当我在文件中添加它时,我回显出会话令牌,它匹配名为’token’的输入中的令牌.但是,当我提交页面并使用Token :: check时,它返回false,如果我再次从输入和会话中回显令牌值,我会看到会话值已更改但输入值保持不变.
<?php class Token{ public static function generate(){ return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); } public static function check($token){ if(isset($_SESSION['token']) && $token == $_SESSION['token']){ unset($_SESSION['token']); return true; }else{ return false; } } } ?> 这是用来控制表单的php. $token = $_POST['token']; if(Token::check($token)){ //Continue with more code } 以下是处理令牌的表单部分: <input type="hidden" name="user_id_update" value="<?php echo $user_info[0][0]->id; ?>"/> <input type="hidden" name="time_update" value="<?php echo $time; ?>"/> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>" <hr /> <div class="form-group"> <input type="submit" id="submit_update" value="Update" class="btn btn-success"/> </div> 如果有人能对此有所了解,我会非常感激,因为我已经在网上搜索了几个小时,但找不到答案.谢谢. 解决方法
经过一些挖掘代码.我发现这些文件被添加到网站的顺序意味着生成令牌的代码位于表单的控制器之上.因此,当表单发布时,它每次都创建一个新的会话变量,因此发布的数据与存储在会话变量中的数据不同.改变包含这些文件的顺序解决了这个问题.希望这可以在将来帮助某人.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |