我正在尝试建立一些自定义api挂钩,以在我们的wordpress网站上实现会话系统,但是我遇到了一些问题。
主要似乎是我的do_action调用不起作用。这是我设置它们的方式。
在木星主题function.php的顶部:
//Custom action for PHP session handling
add_action('init', 'start_session');
add_action('glogout','end_session');
//Start custom functions for PHP Sessions
function start_session() {
if(!session_id()) {
session_start();
}
}
function end_session() {
session_destroy();
}
然后这是我在InsertPHP(又称PHP代码段)插件中使用的代码段。这只是一个测试代码片段,在我删除会话然后创建一个新会话时没有逻辑意义。我只想确认该动作调用是否有效:
do_action('glotout');
session_start();
if (session_id()){
echo $_SESSION['Username']."! Please choose a planet below to get started!";
} else{
echo "space cadet! It seems as though you have not logged in. Please return to the <a href=\"https://www.learninglabtechnologies.com/grant-login-page\">login page</a> and try again!";
}
现在,问题是在我从中调用该代码段的页面上,它没有删除会话,因此我收到“无法启动会话,一个已经存在”错误:
注意:会话已经开始-忽略session_start() 在 /var/www/html/wp-content/plugins/insert-php/includes/shortcodes.php(66) :第2行上的eval()代码
根据此通知,我还遇到尝试访问登录时设置的会话变量的问题:
注意:未定义的索引:用户名位于 /var/www/html/wp-content/plugins/insert-php/includes/shortcodes.php(66) :第5行上的eval()代码
当用户在数据库查询功能期间登录时,我正在设置Username会话变量,这可能是问题的一部分。该代码如下所示:
if ($uLoginStmt = $sql->Prepare("Select ID from Accounts where Username = ? and Password = ?;")){
if ($uLoginStmt->bind_param('ss',$uname,MD5($pword))){
if ($uLoginStmt->execute()){
$uLoginStmt->bind_result($uid);
$uLoginStmt->fetch();
if ($uid != 0){
$bCompleted = true;
$error = "Success";
$_SESSION['Username'] = $uname;
$_SESSION['UserID'] = $uid;
}
...
我以前只使用过一次php会话,而没有在WordPress中使用过,所以我不确定是否所有设置都正确/完整。
更新:
解决了do_action问题。这只是一个错字。另一个问题仍然存在。我仍然无法按所述访问会话变量。我可能设置了错误的内容。
更新2: 来自InsertPHP代码段中的$ _SESSION全局变量的转储导致了此输出(我删除了session_destroy调用):
array(0){}
答案 0 :(得分:0)
好的,我终于明白了。我需要从我的登录php函数中调用session_start(),以便正确拉出会话并设置值。我可能也对EC2服务器上的php配置有问题,以及未设置会话保存路径,并且禁用了其他一些选项。