【问题标题】:Store random string in Session, which gets overwritten, when I call it through another PHP-File当我通过另一个 PHP 文件调用它时,将随机字符串存储在 Session 中,该字符串会被覆盖
【发布时间】:2013-11-19 19:20:08
【问题描述】:

我创建了一个表单,其中包含一个隐藏输入,其值由函数设置。

<?php
    class Token {
        public static function generate(){
            return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
        }
    }
?>

这是这样称呼的:

<input type="hidden" id="token" value="<?php echo Token::generate(); ?>">

我通过 JavaScript/AJAX 将它发送到另一个文件(例如“form.php”),其中包含以下内容:

<?php
   session_start();
   @require_once 'Token.class.php';

   echo $_POST['token'] . " => " . $_SESSION['token']; // different tokens, why?
   // $_POST['token'] is the one, that I want
   // and so on...
?>

当我输入:&lt;?php echo $_SESSION['token']; ?&gt; 时,为什么值会改变?

这是我的项目stored on Dropbox

【问题讨论】:

  • 也许你的第二个文件调用生成方法和第一个一样?
  • 不,如果这很容易:/
  • 尝试检查它是否存在,可能会发生多个请求。
  • 所有文件中都包含session_start(); 吗? @JonLamer
  • 是的,它在所有文件中。

标签: javascript php ajax oop session


【解决方案1】:

因为您每次进入网站时都会生成新的?

<?php
    class Token {
        public static function generate(){
            if(isset($_SESSION['token']) && $_SESSION['token']) return $_SESSION['token'];
            else return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
        }
    }
?>

PS。您可能想改用md5(uniqid())

【讨论】:

  • 是的,我实际上是这样做的,当刷新我的“index.php”时,而不是在我的“form.php”中,我认为应该是一样的
  • 你在哪里发帖?不在同一页面?
  • 发布到“form.php”,应该在哪里验证,但这是AJAX的行为吗?
  • 您需要显示整个代码,因为它可能在您回显之前在 form.php 中重新生成。
  • 我发布 Dropbox 链接时有问题吗?我将它添加到我的帖子中。
猜你喜欢
  • 2017-02-23
  • 2020-06-09
  • 2015-01-04
  • 1970-01-01
  • 2016-02-07
  • 2013-08-22
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多