安全性将在以后添加
我有一个登录脚本,该脚本要么返回json消息(错误的组合,空字段等),要么启动会话并根据登录的用户重定向用户。
现在有两种可能性:admin
和user
。
当我第一次以admin身份登录时,一切正常,但是随后以用户身份登录,然后看到admin的名称和admin会话中的徽标。但是,我已重定向到正确的页面。
无论我刷新多少(甚至是硬刷新ctrl + shift + r),都只有在Chrome中启动隐身窗口并首先以用户身份登录时,才能获得正确的用户信息。
有时,当我登录时,我也会立即重定向到我的登录表单。所以我的代码肯定有问题,但是我不确定是什么。
我的由ajax代码调用并启动会话的PHP脚本返回为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();
为什么会话未完全销毁?
答案 0 :(得分:0)
使用unset($_SESSION['userdata']);
删除用户会话,并在session_regenerate_id(true)
之后立即使用session_start()
使用session_destroy()
函数是正确的,但是session_unset()
用于创建会话的不赞成使用的方法。
请点击此链接以获取更多信息http://php.net/manual/ro/function.session-destroy.php