2014-12-13 7 views
0

Я написал сценарии входа/выхода из системы на моей веб-странице, и когда пользователь входит в систему, я храню в переменной $_SESSION пользовательский агент. Теперь каждый раз, когда страница загружается, я проверяю, зарегистрирован ли пользователь или нет, и если он зарегистрирован, я проверяю, изменился ли пользовательский агент или все тот же, чтобы предотвратить угон. В случае, если оно изменилось Звоню logOut() функцию:Предотвращение захвата сеанса в PHP

function logOut($conn) 
{ 
    $sql = "UPDATE Users SET logged='no' WHERE username='" . $_SESSION['username'] ."'"; 
    $conn->query($sql); 

    // Unset all session values 
    $_SESSION = array(); 

    // get session parameters 
    $params = session_get_cookie_params(); 

    // Delete the actual cookie. 
    setcookie(session_name(), '', time() - 42000, 
    $params["path"], 
    $params["domain"], 
    $params["secure"], 
    $params["httponly"]); 

    // Destroy session 
    session_destroy();  
} 

Теперь проблема заключается в том, что право пользователь все еще может перейти мой сайт, как вошли в то время как я хотел бы, чтобы он вышел из системы. В чем может быть проблема?

Для проверки этого кода я вошел в систему через Mozilla Firefox, и я скопировал значение cookie в Chrome и перезагрузил домашнюю страницу, и, как и ожидалось, я не могу войти в систему с Chrome, но если я перезагружу страницу в Mozilla, это до сих пор вошли в систему.

+0

'$ _SESSION = array();' ничего не удаляет. Он только отключает переменную '$ _SESSION'. –

ответ

0

Это незадана функция лучше использовать(), так как вместо снята с охраны ($ _ SESSION [ 'имя пользователя'])

Кроме того, я могу сказать вам, ваши коды имеют SQL Injection уязвимости здесь

'$ sql = "UPDATE Users SET logged =' no 'WHERE username ='". $ _SESSION ['username']. "'"; «

, потому что каждый может с использованием завитком, измените переменное имя на» или «1» = '1 и ввести это

своего сайта и получить доступ, так что вы можете изменить эту строку

$ sql = "UPDATE Users SET logged = 'no' WHERE username = '". stripslashes ($ _ SESSION ['username']). "'"; '

Смежные вопросы