Mijn probleem is dat wanneer ik eerst inlog met bijvoorbeeld een admin, ik netjes bovenin 'admin' zie staan, maar zodra ik uitlog en weer inlog met een andere gebruiker, zie ik niet die naam staan maar nog steeds 'admin'. Andersom idem dito.
Ik heb al van alles geprobeerd, unset, session_destroy(); noem het maar op.
Dit is mijn bestanden structuur:
index.php (bevat header met connection.php en de html login form)
dashboard.php (bevat header met connection.php en wat html)
admin.php (zelfde als hierboven)
header.php (dit wordt boven alle paginas geinclude behalve login.php en connection.php aangezien dat scripts zijn, deze pagina heeft als eerste regel de include van connection.php).
connection.php (mijn connection script, met de eerste regel session_start(); )
login.php (mijn loginscript, dit script wordt opgeroepen via ajax, aangezien dit via ajax wordt geladen moet hier de volledige connectie class in staat met bovenaan nogmaals session_start(); ).
logout.php (mijn logout script, hoort de sessie te verwijderen en daarna te redirecten naar mijn login pagina, je klikt hierop vanuit een link in de header.php)
Dit is mijn login.php (ik weet dat dit onveilig is, dat ga ik aanpakken nadat de sessies werken zoals ik wil):
<?php
session_start();
class Connection {
// Configure Database Vars
private $host = 'localhost';
private $username = 'xxxxx';
private $password = 'xxxx';
private $db_name = 'xxxxx';
public $db;
function __construct() {
// Create connection
$db = new mysqli($this->host, $this->username, $this->password, $this->db_name);
// Check connection
if ($db->connect_errno > 0) {
die('Unable to connect to the database: '.$db->connect_error);
}
$this->db = $db;
}
public function query($query) {
$db = $this->db;
$this->db->query('SET NAMES utf8');
if (!$result = $this->db->query($query)) {
die('There was an error running the query ['.$db->error.']');
} else {
return $result;
}
}
public function multi_query($query) {
$db = $this->db;
if (!$result = $this->db->multi_query($query)) {
die('There was an error running the multi query ['.$db->error.']');
} else {
return $result;
}
}
public function real_escape_string($value) {
return $this->db->real_escape_string($value);
}
public function inserted_id() {
return $this->db->insert_id;
}
}
$conn = new Connection;
$username = $_POST['username'];
$userpassword = $_POST['userpassword'];
if(empty($username) && empty($userpassword)){
$logindata = array(
'userdata' => '',
'message' => 'Vul een gebruikersnaam en wachtwoord in',
);
echo json_encode($logindata);
}else if(empty($username)){
$logindata = array(
'userdata' => '',
'message' => 'Vul een gebruikersnaam in',
);
echo json_encode($logindata);
}else if(empty($userpassword)){
$logindata = array(
'userdata' => '',
'message' => 'Vul een wachtwoord in',
);
echo json_encode($logindata);
}else{
//Both filled in, begin logincode:
$getuser = "
SELECT u.id as userid, u.username, u.rights, u.password, c.name, c.userid as companyuid, c.logo
FROM users u
LEFT JOIN company c
ON u.id = c.userid
WHERE u.username = '".$conn->real_escape_string($username)."'";
$getusercon = $conn->query($getuser);
$getuser = $getusercon->fetch_assoc();
if(!empty($getuser['logo'])){
$sessionlogo = str_replace('/home/website/public_html/', '', $getuser['logo']);
}else{
$sessionlogo = 'Hier een placeholder';
}
if($userpassword == $getuser['password']){
if($getuser['rights'] == '1'){
$_SESSION['userdata']['user'] = 'Administrator';
$_SESSION['userdata']['rights'] = '1';
$_SESSION['userdata']['logo'] = 'assets/images/logo.png';
$loginresult = array(
'login_result' => 'success',
);
$logindata = array(
'userdata' => 'admin',
);
echo json_encode($logindata);
}else{
$_SESSION['userdata']['user'] = $getuser['name'];
$_SESSION['userdata']['rights'] = '0';
$_SESSION['userdata']['logo'] = $sessionlogo;
$loginresult = array(
'login_result' => 'success',
);
$logindata = array(
'userdata' => 'user',
);
echo json_encode($logindata);
}
}else{
$logindata = array(
'userdata' => '',
'message' => 'Wachtwoord en gebruikersnaam komen niet overeen',
);
echo json_encode($logindata);
}
}
?>
Dit is mijn ajax code in mijn footer (deze staat binnen een document ready functie):
// Login Ajax Code
$( "#content" ).on("submit", "#loginform", function( event ) {
// Stop normal form behaviour
event.preventDefault();
// Retrieve input fields and their values
var $form = $( this ),
$username = $form.find( "input[name='username']" ).val(),
$userpassword = $form.find( "input[name='userpassword']" ).val(),
url = $form.attr( "action" );
// Post above values to the action of the form
var posting = $.post( url, { username: $username, userpassword: $userpassword} );
// Show result in a div
posting.done(function( data ) {
obj = JSON.parse(data);
if(obj.userdata == ''){
$( "#loginresult" ).empty().slideDown('fast').append( obj.message );
}else if(obj.userdata == 'admin'){
window.location.href = "http://www.website.nl/admin";
}else if(obj.userdata == 'user'){
window.location.href = "http://www.website.nl/dashboard";
}
}, "json");
});
Mijn logout.php:
<?php
session_start();
unset($_SESSION['userdata']);
header("Location: http://website.nl/login");
die();
?>
Ik heb ook session_destroy(); geprobeerd ipv unset maar dit heeft hetzelfde effect.
Mijn header.php heeft deze code bovenaan:
<?PHP
include 'includes/connection.php';
// Check if session is set
if(isset($_SESSION['userdata'])){
// Check if page is adminonly, if yes and user has no rights to visit page, redirect to loginpage
if($_SESSION['userdata']['rights'] == '0' && $restriction == 'admin'){
header('Location: http://www.website.nl/login');
}
// Logo
$logo = '<img class="headerlogo" src="'.$_SESSION['userdata']['logo'].'">';
}else{
header('Location: http://www.website.nl/login');
}
?>
Met deze code log ik dus in, de 1e keer correct, maar de keren erna wil hij de vorige user maar niet vergeten/verwijderen.
Ook log ik soms in en word ik direct weer geredirect naar mijn login form, oftewel pas na twee keer inloggen wordt ik daadwerkelijk geredirect.
Waar kunnen deze problemen aan liggen?