【问题标题】:Why $_SESSION['token'] value changes on page load?为什么在页面加载时 $_SESSION['token'] 值会发生变化?
【发布时间】:2011-11-04 17:59:47
【问题描述】:

我创建了脚本。来源 -

控制器 -

 public function action_index() {
        session_start();
        $_SESSION['token'] = rand();
if (isset($_GET['do']) and $_GET['do'] == 'comment') {//Ja viss kārtībā, turpinam
            var_dump($_POST['token']);
            var_dump($_SESSION['token']);
            if ($_SESSION['token'] == $_POST['token']) {
echo 'ok';
}
else{ echo 'error'; }

查看 -

<form action="?do=comment" class="form-komentaram" method="post" style="margin: 7.5px;">
    <input type="text" name="name" required="required" placeholder="Tavs vārds..." /><br />
    <input type="text" name="homepage" placeholder="Tava mājaslapa..." /><br />
    <input type="hidden" name="artcl_id" value="<?php echo $article['id']; ?>" />
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" />
    <textarea name="text" required="required"></textarea><br />
    <input type="submit" value="OK!" required="required" />
</form>

我看到,使用 var_dump,$_SESSION['token'] 会在页面加载时发生变化。 例如,我在输入字段中提交令牌并重新加载页面以检查令牌,但是页面重新加载之前的$_SESSION['token']是23456,而$_POST['token']是23456,但是页面重新加载之后是$_SESSION['token '] 是 12345。为什么?

【问题讨论】:

  • 可能是因为$_SESSION['token'] = rand();

标签: php frameworks kohana


【解决方案1】:

根据您发布的代码,每次调用 action_index() 时,$_SESSION['token'] 都会被替换为新值。应该这样做:

if (!array_key_exists('token', $_SESSION)) {
    $_SESSION['token'] = rand();
}

然后对 action_index() 的任何后续调用都不会继续覆盖您的会话令牌值。

【讨论】:

    【解决方案2】:

    因为您每次加载页面时都会为其分配一个随机值。

            $_SESSION['token'] = rand(); 
    

    然后您将其作为隐藏输入回显。 " />

    因此,下次您提交表单时,它将具有回显值。

    如果您想为会话分配一次,请执行以下操作:

    if (!$_SESSION['token']) {
        $_SESSION['token'] = rand();
    }
    

    【讨论】:

      【解决方案3】:
      $_SESSION['token'] = rand();
      

      您明确更改了$_SESION['token'] 的值。

      【讨论】:

        【解决方案4】:
        $_SESSION['token'] = rand();
        

        在这里使用会话时要做的第一件事是将$_SESSION['token'] 设置为随机值。因此,每次使用代码时,值都会有所不同。 (或者,至少,非常可能会有所不同。)

        您可能希望在为其分配随机值之前检查一个值,或者在会话在代码中的其他位置而不是在每次加载页面时开始时分配随机值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-10
          • 2016-07-07
          • 1970-01-01
          • 1970-01-01
          • 2018-05-08
          相关资源
          最近更新 更多