会话变量未在函数中设置

Posted

技术标签:

【中文标题】会话变量未在函数中设置【英文标题】: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/tok。 Clear current tok value。 Destroy Session and Session Cookie。 Source code: index.php and token.php。原问题:session php rand other values. 【参考方案1】:

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

// Report all errors
error_reporting(E_ALL);

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于会话变量未在函数中设置的主要内容,如果未能解决你的问题,请参考以下文章

反向代理背后的WordPress:未在Safari和IE中设置会话cookie

JAVA_HOME 变量未在 Windows 中设置 [重复]

使用 AJAX 在 PHP 中设置会话变量

Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置

如果未在数据库中设置,返回变量为null的视图

未在 cookie 中设置令牌