我试图弄清楚为什么我的会话变量没有转到我的其他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;
}
}
}
同样,我查了会议会话类中的变量以及它们的设置。
会话是否在后续页面上启动? – 2014-10-29 16:53:40
在尝试访问$ _SESSION之前,不应该调用checkLogin()方法吗? – 2014-10-29 16:57:40
@DavidJones我做了,我只是删除,以节省代码空间在这里。这就是我知道会话变量已设置的方式。 – user2812097 2014-10-29 17:04:05