【问题标题】:Session variable not set within functions会话变量未在函数中设置
【发布时间】:2016-05-21 14:59:22
【问题描述】:

我正在尝试设置一个会话变量来记录人们何时投票,但 PHP 完全拒绝设置它。代码如下:

elseif (isset($_GET['group']) && isset($_GET['vote']))
    {
        include_once(_INC.'otherheader.php');
        groupVotePage($group, $vote);
        $_SESSION[$group] = '1';
        echo $_SESSION[$group];
    }

什么都没有。函数 groupVotePage 将投票添加到数据库并回显感谢消息。 $group 是被投票的组的名称。我有 session_start();在页面顶部,并尝试在调用的函数中声明变量,将 session_start();到处。会话变量在网站的其他地方使用,所以我知道这不是服务器问题,而且在我尝试过的所有浏览器上都是一样的。

在函数内声明会话变量有效,但仅在函数内有效 - 它不会成为全局变量。

 if(!isset($_SESSION[$group])) {
        $totalVote=$totalVote+$vote;
        $totalNumVotes=$totalNumVotes+1;
        $totalRating=round($totalVote/$totalNumVotes);
        $totalScore=$totalVote*$totalNumVotes;
        ...db stuff...

        $mysqli->query($query);

        echo'Thanks for voting!';
    }

    else {
        echo'You have already voted for this group!';
    }

【问题讨论】:

  • 你确定它曾经达到那个条件吗?
  • 您应该显示$group 的价值所在,并考虑在$_SESSION 上执行var_dump
  • $group 和 $vote 都是用户选择并正确转义的,整个函数像发条一样运行,所以我知道正在传递变量。在函数内声明 session var 有效,但仅在函数内有效 - 它不会成为全局变量。
  • 您关于将会话开始无处不在的评论很有趣。由于尝试多次启动会话,我希望看到错误消息。您是否有兴趣确保会话始终只启动一次并且您将看到所有错误?如果是这样,请按照说明操作:Create a simple application bootstrap file。从当前脚本中删除所有 session_start(); 指令。现在,1)会话总是启动 2)你会看到错误。将notices 视为错误并修复它们。然后我们可以修复您当前脚本的问题。
  • 也许很有趣?在另一个与您的会话问题类似的问题中,我用简单的代码将一个网站放在一起,用于处理会话:网站:rfv123.eu.pn/tokClear current tok valueDestroy Session and Session CookieSource code: index.php and token.php。原问题:session php rand other values.

标签: php session-variables


【解决方案1】:

也许你可以使用 PHP 错误报告代码来找出你哪里出错了

// Report all errors
error_reporting(E_ALL);

【讨论】:

    【解决方案2】:

    好的,修复它, 部分在 session_start(); 之前,当我把它放在代码工作之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多