我试图找出为什么我的会话变量没有转移到我的其他php页面。我创建了一个会话类,它根据_Session
控制登录状态,并生成_Sessions
变量。每当我检查类时,它都会设置_Session
变量,但如果我尝试在其他php页面上使用$_Session[key]
,我会得到空白值。有人可以告诉我为什么吗?
会话班:
class Session{
private $bLoggedIn = false;
function __construct(){
session_start();
$this->checkLogin();
if(isset($_POST['bLogOut'])){
$this->logOut();
}
}
public function isLoggedIn($sUser){
return $this->bLoggedIn();
}
public function logIn($sTable, $sUserName, $sPassword){
if($this->bLoggedIn){
return 'Already logged in.';
} else{
$queryResults = makeLoginRequest($sTable, $sUserName, $sPassword);
$_SESSION['user_Id'] = $queryResults[0]['user_Id'];
$_SESSION['password'] = $queryResults[0]['password'];
$_SESSION['firstName'] = $queryResults[0]['firstName'];
$_SESSION['lastName'] = $queryResults[0]['lastName'];
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + 1800;
$this->bLoggedIn = true;
return $queryResults[0];
}
}
public function logOut(){
session_destroy();
$this->bLoggedIn = false;
echo 'Successfully logged out.';
}
public function checkLogin(){
if(isset($_SESSION['user_Id'])){
$this->bLoggedIn = true;
return $this->bLoggedIn;
} else{
$this->bLoggedIn = false;
return $this->bLoggedIn;
}
}
}
请求类(这是我尝试获取会话变量值并返回空值的类):
class request{
private $iUserId;
private $sPassword;
private $sFirstName;
private $sLastName;
public function __construct($sService, $oData, $iAffectedUserId){
$session = new Session();
// The four values below are empty because the $_SESSION variables are empty
$this->iUserId = $_SESSION['user_Id'];
$this->sPassword = $_SESSION['password'];
$this->sFirstName = $_SESSION['firstName'];
$this->sLastName = $_SESSION['lastName'];
switch($sService){
case 'follower':
$this->requestFollower();
break;
case 'followee':
$this->requestFollowee();
break;
case 'promoter':
$this->requestPromoter();
break;
case 'promotee':
$this->requestPromotee();
break;
case 'note':
$this->requestNote();
break;
case 'createFollowee':
$this->createFollowee();
break;
case 'createPromotee':
$this->createPromotee();
break;
case 'createNote':
$this->$sNote = $oData;
$this->createNote($iAffectedUserId, $this->sNote);
break;
case 9:
break;
case 1:
break;
default:
echo "ErrorCode: 4000";
break;
}
}
}
同样,我检查了会话类中的会话变量并设置了它们。
答案 0 :(得分:0)
在类文件中很早就移动session_start();
,而不是在构造函数中。
还要将它添加到您的第一行请求类中(如果您没有使用命名空间)。
在您的会话课程中,以及您想要开始会话的任何地方,您可以检查是否已有会话。
if (!session_id()) {
session_start();
}
class Session{
private $bLoggedIn = false;
....
从构造函数中删除session_start。
在请求中执行相同操作。 如果没有开始,它会开始一个会话。