|
|
|
| Доброго времени суток всем. Итак описываю ситуацию.
При аутентификации пользователей (то бишь входе в систему), необходимо как-то узнавать, зашёл такой пользователь или нет...
Есть несколько путей решения такой проблемы:
1. создать таблицу в базе данных и закидывать туда всех, кто залогинился, при выходе удалять строку... И запустить чего-нибудь автоматическое, чтоб оно как-то определяло, залогинен ли сейчас такой-то пользователь. Если нет и его запись существует, удалять автоматически... ПРОБЛЕМА!!! Перегружен будет сервер... Как я думаю...
2. Загонять в xml-файл всех пользователей, залогиненых... Но на php - моразм...
3. Использовать суперглобальные переменные, но здесь не на каждом сервере соответствующие настройки будут... В общем практически нереально...
Как я смотрю, так многие на этот вопрос просто забили... Взять то же мыло.ру (mail.ru), так у них можно просто зайти хоть со 100 броузеровпод одним ником...
Может я зря парюсь. Скажите хоть кто-то, нужно ли это и если да, то какой выход лучше?
Заранее благодарю | |
|
|
|
|
|
|
|
для: Aid
(03.05.2007 в 12:47)
| | 1. создать таблицу в базе данных и закидывать туда всех, кто залогинился, при выходе удалять строку... И запустить чего-нибудь автоматическое, чтоб оно как-то определяло, залогинен ли сейчас такой-то пользователь. Если нет и его запись существует, удалять автоматически... ПРОБЛЕМА!!! Перегружен будет сервер... Как я думаю...
По хорошему - вариант вполне приемлемый... вот только НЕПОНЯТНО!!! ЗАЧЕМ запускать что-то автоматическое????
При входе тупо проверять ВСЕГО ОДНИМ запросом, вошел этот аккаунт или нет - если да, то говорить, типа какого черта ломишься - ты уже залогинен... | |
|
|
|
|
|
|
|
для: ZuArt
(03.05.2007 в 12:53)
| | Благодарю за ответ. А если автоматом не выкидывать незалогиненные, то как, если вдруг пользователь закрыл страницу, не произведя правильный выход (нажатием соответствующего линка), он зайдёт потом? :) | |
|
|
|
|
|
|
|
для: Aid
(03.05.2007 в 12:47)
| | А с какой целью это делается? Может оно того не стоит? Что произойдет, если я зайду на сайт из двух броузеров? | |
|
|
|
|
|
|
|
для: Loki
(03.05.2007 в 13:10)
| | тут человек поставил четкую задачу, как этого избежать - зачем вникать во что-то еще? | |
|
|
|
|
|
|
|
для: ZuArt
(03.05.2007 в 13:33)
| | Да просто интересно... Если у меня повис броузер и я попытался зайти с другого, то мне придется дожидаться конца сессии? Или если какие-то глюки верстки... или что чаще встречается - глюки JS... да в конце концов, у разных броузеров разные инструменты в арсенале. Короче, часто приходится лазить на один сайт из разных броузеров одновременно (правда, в 90% случаев как разработчику). Вот мне и стало интересно, с чем связана политика сайта, не пускать меня под моим правильным логином и паролем с разных компьютеров/броузеров? | |
|
|
|
|
|
|
|
для: Loki
(03.05.2007 в 13:40)
| | Хммм... Эти слова от части меня завели в тупик... Незнаю что и сказать, ибо естественным способом проверить все равно не получится... В смысле сразу узнать, если я, допустим просто закрыл броузер без нажатия какого-либо сабмита, а посему либо сервер перегружай, чтоб он перелопачивал ту бедную таблицу раз в минуту либо Бог его знает... А политика? Ну эт "хорошие" люди мне сказали чтоб так было. Сайт новостей... Он является частью веб-портала... Начальство хочет безопасность по полной...
Что поделаешь, когда придумают такое... А хотя оно то и правильно, вот возьмём тот же ASP.Net, там ведь продумано товарищами из Майкрософта... Но опять таки, сервер будет загружен больше обычного | |
|
|
|
|
|
|
|
для: ZuArt
(03.05.2007 в 13:33)
| | Решить задачу в такой постановке сложно - разные окна браузеров себя ведут как одно окно, если узнать конечную цель - возможно можно будет найти альтернативное решение. | |
|
|
|
|
|
|
|
для: ZuArt
(03.05.2007 в 13:33)
| | Задачи аутентификации в тонких клиентах (коими являются веб страницы) - по определению нечеткие, поскольку http-протокол явных сессий не поддерживает. Можно и не вникать. Но тогда незачем браться. | |
|
|
|
|
|
|
|
для: Trianon
(03.05.2007 в 13:51)
| | =))) фактически это было офф-топ =))) аналогичный ответ человеку, который в другом топе мне так же ответил =))) | |
|
|
|
|
|
|
|
для: Aid
(03.05.2007 в 12:47)
| | А если попробывать сделать еще одну таблицу, куда закидывать id_сессии и id_пользователя и флаг на закрытие сессии (возможно, еще какие временные данные).
При авторизации пользователя проверять, есть ли уже запись на его id_пользователя в таблице сессий, если есть - ставить у уже имеющейся записи флаг на закрытие. Потом для входящего пользователя создавать запись.
При переходе пользователя проверять флаг на закрытие, если он установлен, убивать сессию, выводить пользователю сообщение о том, что под его ником зашли.
Для того, чтобы в таблице не накапливались данные о редкозаходящих посетителях, можно в таблицу сессий вносить еще время перехода и,например, раз в сутки удалять из этой таблице всех пользователей, чьи записи старше 1 дня (время взято произвольно, можно и чаще, и реже. | |
|
|
|
|
|
|
|
для: victoor
(03.05.2007 в 20:52)
| | спасибо за ответ...
но пожалуй лучше вовсе отказаться от идеи... Пусть себе логинятся... Там измыслю что-нибудь... Пока что и это не идеальное решение, ведь тогда можно и логиниться раз день или чаще, но всё же...
спасибо... Я лучше пока что откажусь от этой идеи... | |
|
|
|
|
|
|
|
для: Aid
(03.05.2007 в 12:47)
| | В таблице с пользователями добавить столбец, в который записывать время последнего действия пользователя (просмотр страницы и т.д.). При авторизации сравнивать разницу между текущим временим и временем последнего действия пользователя. Если оно больше , допустим 5 минут, то пользователь в оффлайне. Время надо подбирать исходя из тематики ограниченной зоны сайта. Правда у этого способа есть серьёзный минус - при большом количестве пользователей обновление времени занимает много времени. | |
|
|
|
|
|
|
|
для: Bronepoz[)
(05.05.2007 в 17:57)
| | >Правда у этого способа есть серьёзный минус - при большом количестве пользователей обновление времени занимает много времени
Да почему? Если таблицу онлайн пользователей сделать отдельно от основной - она будет относительно небольшой, пространство её данных будет закешировано и доступ будет мгновенным. | |
|
|
|