Цитата (Godwarlock @ 8.11.2014 - 20:31) |
У меня есть окно авторизованного пользователя где указаны его данные вытаскиваемые из бд. Суть проблемы состоит в том, что я могу зайти на аккаунт пользователя с любой страницы браузера, то есть, через каждую вкладку, при авторизации пользователя, открывается страница с его данными и таким образом я могу с любого компьютера производить действия на одном аккаунте. Собственно вопрос, как выбить предыдущего зашедшего пользователя со страницы с его данными и авторизовать только того, кто только что авторизовался? Есть ли какой-нибудь наиболее простой способ/пример? |
Это что-то похожее на вы вошли одновременно с 2х устройств. Возможно ваш аккаунт взломан?
Мне кажется что похожие системы опрашивают клиента на предмет его состояния он-лайн и если появляешься сразу 2 раза он-лайн - это проблема.
А вообще возможно разные методы:
- проверять присутствие он-лайн;
- записывать ид сессии, куки;
- устанавливать флаг залогиненый, а остальных отваливать;
- другие варианты.
1) Надо взвесить стоит ли такая безопасность такой системе.
2) Придумывать варианты исходя из того, что умеет делать система и какая безопасность уже придумана.
В общем дело не на 5 минут.
Цитата (Godwarlock @ 9.11.2014 - 13:41) |
I++ А как получить id сессии? |
Самому сгенерировать. Однако!
Лучше в бд записывать ай-пи. Если ай-пи другой возвращать авторизацию нул.
Godwarlock
9.11.2014 - 17:37
mvg
Хорошо. Допустим это так. В прочем в этом я не вижу сложности, я вижу сложность только в том, как обнулить запись в бд, после того как пользователь покинул страницу, грубо говоря просто закрыл вкладку в браузере и после этого запись в бд с полем айпишника должна обновиться, чтобы пользователь снова смог зайти в систему, иначе его старый айпишник там так и будет висеть. А не у всех пользователей статичный айпи, у большинства он динамичный. Я просто не знаю как в коде выполнить условие, если пользователь закрывает браузер/покидает страницу.
if (!empty($_COOKIE['login_id'])) {
$id = (int)$_COOKIE['login_id'];
$sql = "SELECT last_session FROM `user` WHERE id = $id";
$login = mysql_fetch_assoc(mysql_query($sql));
if (session_id() != $login['last_session']) {
die();
}
}
В прочем в этом я не вижу сложности, я вижу сложность только в том, как обнулить запись в бд, после того как пользователь покинул страницу, грубо говоря просто закрыл вкладку в браузере и после этого запись в бд с полем айпишника должна обновиться
Проверять есть ли пользователь он-лайн. Как пользователь ушел в оф-лайн апдейтить поле ай-пи.
Cron_ом что ли это делать ?
Ведь когда "вышел" последний пользователь, "кому" изменение вносить ?
Godwarlock
9.11.2014 - 21:22
mvg<?
session_start();
if(isset($_POST['login'])){
$user_login = addslashes($_POST['login']);
$user_pass = addslashes($_POST['pass']);
$status = addslashes($_POST['status']);
include "connect.php";
$result = mysql_query ("SELECT * FROM table_users WHERE user_login='$user_login'", $db);
if(mysql_num_rows($result) != 0)
{
$id = (int)$_SESSION['login'];
$sql = mysql_query ("UPDATE table_users SET status={$id} WHERE user_login='$user_login'");
$login = mysql_fetch_assoc(mysql_query($sql));
$row = mysql_fetch_array($result);
if($row['user_pass'] == $user_pass)
{
echo "<data>
<id><![CDATA[".$row['id']."]]></id>
<login><![CDATA[".$row['user_login']."]]></login>
<pass><![CDATA[".$row['user_pass']."]]></pass>
<mail><![CDATA[".$row['mail']."]]></mail>
</data>";
}
else{
echo 'fail';
}
}
else{
echo 'fail';
}
mysql_close($db);
}
?>
Пытаюсь записать в бд сессию чет не выходит =/
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.