Php 无法使用类启动会话
我创建了一个名为login.class.php的类Php 无法使用类启动会话,php,Php,我创建了一个名为login.class.php的类 <?php class Login { public $errors = array(); public $messages = array(); private $db_connection = null; private $username = ''; private $password
<?php
class Login
{
public $errors = array();
public $messages = array();
private $db_connection = null;
private $username = '';
private $password = '';
private $logged_in = false;
public function __construct()
{
session_start();
if (isset($_GET["logout"]))
{
$this->doLogout();
}elseif(isset($_POST['login']))
{
$this->doLogin($_POST['username'],$_POST['password']);
}
}
// KONEKSI KE DATABASE
private function dbConn()
{
if ($this->db_connection != null)
{
return true;
}else{
try
{
$this->db_connection = new PDO('mysql:host='.HOST.';dbname='.NAME.';charset=utf8', USER, PASS);
return true;
}catch (PDOException $e){
$this->errors[] = "Terdapat kesalahan : ".$e->getMessage();
}
}
return false;
}
// METHOD LOGIN
public function doLogin($username, $password)
{
if ($this->dbConn())
{
$query_user = $this->db_connection->prepare('SELECT * FROM login WHERE username = ? LIMIT 1');
$query_user->bindValue(1, $username, PDO::PARAM_INT);
$query_user->execute();
$hasil = $query_user->fetchObject();
}
if(!isset($hasil->username))
{
$this->errors[] = "Username tidak terdaftar";
}elseif($hasil->password != md5($password)){
$this->errors[] = "Password yang Anda masukkan salah";
}else{
$_SESSION['username'] = $hasil->username;
$_SESSION['logged_in'] = true;
$this->logged_in = $_SESSION['logged_in'];
$this->username = $hasil->username;
$this->password = $hasil->password;
}
}
public function doLogout()
{
$_SESSION = array();
session_destroy();
$this->logged_in = false;
header('Location: index.php');
}
public function UserLoggedIn()
{
return $this->logged_in;
}
} ?>
<?php
require_once 'includes/config.php';
require_once 'classes/login.class.php';
$login = new Login();
if ($login->UserLoggedIn() == true) {
header('Location: admin.php');
} ?>
<form action="" method="post">
<h1>Halaman Login</h1>
<div class="login-fields">
<?php
if(isset($login))
{
if($login->errors)
{
foreach($login->errors as $error) { echo"$error</p>"; }
}else{
echo'<p>Masukkan detail</p>';
}
}
?>
<div class="field">
<label for="username">Username</label>
<input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" required>
</div> <!-- /field -->
<div class="field">
<label for="password">Password:</label>
<input type="password" id="password" name="password" value="" placeholder="Password" class="login password-field" required>
</div> <!-- /password -->
</div> <!-- /login-fields -->
<div class="login-actions">
<button type="submit" name="login" class="button btn btn-success btn-large">Masuk</button>
</div> <!-- .actions -->
</form>
<?php
/* Get All errors */
ini_set('display_errors', 'On');
error_reporting(E_ALL);
if(session_id() == '') {
session_start();
}
var_dump($_SESSION['test']);
?>
然后我创建了另外两个名为login.php的页面
<?php
class Login
{
public $errors = array();
public $messages = array();
private $db_connection = null;
private $username = '';
private $password = '';
private $logged_in = false;
public function __construct()
{
session_start();
if (isset($_GET["logout"]))
{
$this->doLogout();
}elseif(isset($_POST['login']))
{
$this->doLogin($_POST['username'],$_POST['password']);
}
}
// KONEKSI KE DATABASE
private function dbConn()
{
if ($this->db_connection != null)
{
return true;
}else{
try
{
$this->db_connection = new PDO('mysql:host='.HOST.';dbname='.NAME.';charset=utf8', USER, PASS);
return true;
}catch (PDOException $e){
$this->errors[] = "Terdapat kesalahan : ".$e->getMessage();
}
}
return false;
}
// METHOD LOGIN
public function doLogin($username, $password)
{
if ($this->dbConn())
{
$query_user = $this->db_connection->prepare('SELECT * FROM login WHERE username = ? LIMIT 1');
$query_user->bindValue(1, $username, PDO::PARAM_INT);
$query_user->execute();
$hasil = $query_user->fetchObject();
}
if(!isset($hasil->username))
{
$this->errors[] = "Username tidak terdaftar";
}elseif($hasil->password != md5($password)){
$this->errors[] = "Password yang Anda masukkan salah";
}else{
$_SESSION['username'] = $hasil->username;
$_SESSION['logged_in'] = true;
$this->logged_in = $_SESSION['logged_in'];
$this->username = $hasil->username;
$this->password = $hasil->password;
}
}
public function doLogout()
{
$_SESSION = array();
session_destroy();
$this->logged_in = false;
header('Location: index.php');
}
public function UserLoggedIn()
{
return $this->logged_in;
}
} ?>
<?php
require_once 'includes/config.php';
require_once 'classes/login.class.php';
$login = new Login();
if ($login->UserLoggedIn() == true) {
header('Location: admin.php');
} ?>
<form action="" method="post">
<h1>Halaman Login</h1>
<div class="login-fields">
<?php
if(isset($login))
{
if($login->errors)
{
foreach($login->errors as $error) { echo"$error</p>"; }
}else{
echo'<p>Masukkan detail</p>';
}
}
?>
<div class="field">
<label for="username">Username</label>
<input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" required>
</div> <!-- /field -->
<div class="field">
<label for="password">Password:</label>
<input type="password" id="password" name="password" value="" placeholder="Password" class="login password-field" required>
</div> <!-- /password -->
</div> <!-- /login-fields -->
<div class="login-actions">
<button type="submit" name="login" class="button btn btn-success btn-large">Masuk</button>
</div> <!-- .actions -->
</form>
<?php
/* Get All errors */
ini_set('display_errors', 'On');
error_reporting(E_ALL);
if(session_id() == '') {
session_start();
}
var_dump($_SESSION['test']);
?>
哈拉曼登录
用户名
密码:
马苏克
和admin.php:
<?php
error_reporting(0);
require_once 'includes/config.php';
require_once 'classes/login.class.php';
$login = new Login();
if ($login->UserLoggedIn() == true) {
//PROTECTED PAGE HERE
}
?>
但是会话被保存在login.class.php中的doLogin()中
很抱歉我的错误解释,我希望你知道我的意思。也许你的问题是,$\u GET[“logout”]变量仍然设置,并且在构造函数中你的类破坏了会话。尝试取消设置所有$\u在使用后获得变量。首先需要检查会话工作。创建twp新php文件,例如test.php、example.php test.php
<?php
/* Get All errors */
ini_set('display_errors', 'On');
error_reporting(E_ALL);
if(session_id() == '') {
session_start();
}
$_SESSION['test'] = 'test';
?>
如果您尝试启动会话的第一行代码,它工作正常?仍然不工作。我认为我的问题是登录的_被初始化为false。然后我尝试在doLogin()中将其设置为true,但在处理admin.php页面时,它又变回false