会话变量未在函数中设置
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 中设置 [重复]