我是初学者。现在我正在尝试建立一个简单的登录/注册系统来学习。
它曾经起过作用,但现在不行了,我不知道哪里出了问题。慢慢地,我的代码变成了意大利面条。
我想要什么:登录后启动会话的LOGIN系统。但会话不工作!请注意,所有的回声都很难看,但只是为了让我现在检查一下!
我的HTML代码:
//Check if class responds
$user->classtest();
session_start();
//Login-Function
if($user->checkSession()) {
echo "Session is okay";
} else {
if(isset($_POST['uname']) && isset($_POST['upass'])) {
$name = $_POST['uname'];
$pass = $_POST['upass'];
if($user->checkPW($name,$pass)) {
$user->startSession($name,$pass);
} else {
echo "Your Login is wrong, please try again";
$user->loginForm();
}
} else {
echo "<br>You are not logged in. Please login!";
$user->loginForm();
}
}
以下是类中的函数:启动会话:
public function startSession($uname,$upass) {
$userData = $this->getUserData($uname);
session_start();
$_SESSION['username'] = $userData[0]["username"];
$_SESSION['password'] = $userData[0]["password"];
echo "<br>You are logged in and we started the session ";
echo "<br>Username: " . $_SESSION['username'] . "<br>";
echo "<br>Password: " . $_SESSION['password'] . "<br>";
return true;
}
以及我的功能,应该检查是否有会话:
public function checkSession() {
if(isset($_SESSION['username']) && isset($_SESSION['password'])) {
return true;
} else {
return false;
}
}
现在,尽管我的startSession函数在提交登录表单后正确地给了我$_SESSION['username]],但checkSession((函数总是给我false。
抱歉代码不完美等等。我是一个真正的初学者,还在想办法!
您调用checkSession
BEFORE您曾经调用session_start()
,这意味着$_SESSION
将为空,并且您的isset()
调用将失败。
只需在文件顶部使用session_start();
初始化会话。
或者,如果必要的话,在类的构造函数中:
function __construct() { session_start(); }
请注意在初始化会话(或设置cookie(之前有输出。