Безопасность будет добавлена позже
У меня есть сценарий входа в систему, который либо возвращает сообщение в формате json (неверное поле со списком, пустые поля и т. Д.), Либо запускает сеанс и перенаправляет пользователя в соответствии скакой пользователь вошел в систему.
Теперь есть 2 возможности: admin
и user
.
Когда я впервые захожу как администратор, все работает нормально, но затем я захожу как пользователь, и я вижу имя администратора и логотип, который находится в сеансе администратора.Однако я перенаправлен на правильную страницу.
Независимо от того, сколько я обновляю (даже жесткое обновление Ctrl + Shift + R), я не могу отобразить правильную информацию о пользователе, только если я запускаю инкогнитоокно в Chrome и войдите в систему как пользователь первым.
Иногда, когда я вхожу в систему, меня также сразу же перенаправляют в форму для входа.Так что что-то определенно не так в моем коде, но я не уверен, что.
Мой PHP-скрипт, который вызывается с помощью ajax-кода и запускает сеанс, возвращается как JSON
, возможно ли даже запустить сеанс, когда этоэто тот случай?
Мой код ajax сейчас:
// 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.vcaweb.nl/admin";
}else if(obj.userdata == 'user'){
window.location.href = "http://www.vcaweb.nl/dashboard";
}
}, "json");
});
Мой скрипт php:
<?php
session_start();
*connection class is here*
$conn = new Connection;
$username = $_POST['username'];
$userpassword = $_POST['userpassword'];
*error messages code not relevant*
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/vcaweb/public_html/', '', $getuser['logo']);
}else{
$sessionlogo = 'Hier een placeholder';
}
if($userpassword == $getuser['password']){
if($getuser['rights'] == '1'){
$_SESSION['userdata']['user'] = 'Mark Kraaijo';
$_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);
}
}
?>
В моем заголовке перенаправленных страниц есть следующее:
// Check if session is set
if(isset($_SESSION['userdata'])){
// Check if user is admin, if yes and user has rights to visit page, redirect to loginpage
if($_SESSION['userdata']['rights'] == '0' && $restriction == 'admin'){
header('Location: http://www.vcaweb.nl/login');
}
// Logo
$logo = '<img class="headerlogo" src="'.$_SESSION['userdata']['logo'].'">';
}else{
header('Location: http://www.vcaweb.nl/login');
}
И в заголовке моей формы входа в систему (включая мой файл класса соединения, который запускает сеанс):
session_unset();
session_destroy();
Почему сеанс не уничтожается полностью?