Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Аутентификация пользователей... Может эта тема и уже изъеденная, но есть одно но...
 
 автор: Aid   (03.05.2007 в 12:47)   письмо автору
 
 

Доброго времени суток всем. Итак описываю ситуацию.
При аутентификации пользователей (то бишь входе в систему), необходимо как-то узнавать, зашёл такой пользователь или нет...
Есть несколько путей решения такой проблемы:
1. создать таблицу в базе данных и закидывать туда всех, кто залогинился, при выходе удалять строку... И запустить чего-нибудь автоматическое, чтоб оно как-то определяло, залогинен ли сейчас такой-то пользователь. Если нет и его запись существует, удалять автоматически... ПРОБЛЕМА!!! Перегружен будет сервер... Как я думаю...
2. Загонять в xml-файл всех пользователей, залогиненых... Но на php - моразм...
3. Использовать суперглобальные переменные, но здесь не на каждом сервере соответствующие настройки будут... В общем практически нереально...

Как я смотрю, так многие на этот вопрос просто забили... Взять то же мыло.ру (mail.ru), так у них можно просто зайти хоть со 100 броузеровпод одним ником...
Может я зря парюсь. Скажите хоть кто-то, нужно ли это и если да, то какой выход лучше?
Заранее благодарю

   
 
 автор: ZuArt   (03.05.2007 в 12:53)   письмо автору
 
   для: Aid   (03.05.2007 в 12:47)
 

1. создать таблицу в базе данных и закидывать туда всех, кто залогинился, при выходе удалять строку... И запустить чего-нибудь автоматическое, чтоб оно как-то определяло, залогинен ли сейчас такой-то пользователь. Если нет и его запись существует, удалять автоматически... ПРОБЛЕМА!!! Перегружен будет сервер... Как я думаю...

По хорошему - вариант вполне приемлемый... вот только НЕПОНЯТНО!!! ЗАЧЕМ запускать что-то автоматическое????

При входе тупо проверять ВСЕГО ОДНИМ запросом, вошел этот аккаунт или нет - если да, то говорить, типа какого черта ломишься - ты уже залогинен...

   
 
 автор: Aid   (04.05.2007 в 14:20)   письмо автору
 
   для: ZuArt   (03.05.2007 в 12:53)
 

Благодарю за ответ. А если автоматом не выкидывать незалогиненные, то как, если вдруг пользователь закрыл страницу, не произведя правильный выход (нажатием соответствующего линка), он зайдёт потом? :)

   
 
 автор: Loki   (03.05.2007 в 13:10)   письмо автору
 
   для: Aid   (03.05.2007 в 12:47)
 

А с какой целью это делается? Может оно того не стоит? Что произойдет, если я зайду на сайт из двух броузеров?

   
 
 автор: ZuArt   (03.05.2007 в 13:33)   письмо автору
 
   для: Loki   (03.05.2007 в 13:10)
 

тут человек поставил четкую задачу, как этого избежать - зачем вникать во что-то еще?

   
 
 автор: Loki   (03.05.2007 в 13:40)   письмо автору
 
   для: ZuArt   (03.05.2007 в 13:33)
 

Да просто интересно... Если у меня повис броузер и я попытался зайти с другого, то мне придется дожидаться конца сессии? Или если какие-то глюки верстки... или что чаще встречается - глюки JS... да в конце концов, у разных броузеров разные инструменты в арсенале. Короче, часто приходится лазить на один сайт из разных броузеров одновременно (правда, в 90% случаев как разработчику). Вот мне и стало интересно, с чем связана политика сайта, не пускать меня под моим правильным логином и паролем с разных компьютеров/броузеров?

   
 
 автор: Aid   (04.05.2007 в 15:10)   письмо автору
 
   для: Loki   (03.05.2007 в 13:40)
 

Хммм... Эти слова от части меня завели в тупик... Незнаю что и сказать, ибо естественным способом проверить все равно не получится... В смысле сразу узнать, если я, допустим просто закрыл броузер без нажатия какого-либо сабмита, а посему либо сервер перегружай, чтоб он перелопачивал ту бедную таблицу раз в минуту либо Бог его знает... А политика? Ну эт "хорошие" люди мне сказали чтоб так было. Сайт новостей... Он является частью веб-портала... Начальство хочет безопасность по полной...
Что поделаешь, когда придумают такое... А хотя оно то и правильно, вот возьмём тот же ASP.Net, там ведь продумано товарищами из Майкрософта... Но опять таки, сервер будет загружен больше обычного

   
 
 автор: cheops   (03.05.2007 в 13:46)   письмо автору
 
   для: ZuArt   (03.05.2007 в 13:33)
 

Решить задачу в такой постановке сложно - разные окна браузеров себя ведут как одно окно, если узнать конечную цель - возможно можно будет найти альтернативное решение.

   
 
 автор: Trianon   (03.05.2007 в 13:51)   письмо автору
 
   для: ZuArt   (03.05.2007 в 13:33)
 

Задачи аутентификации в тонких клиентах (коими являются веб страницы) - по определению нечеткие, поскольку http-протокол явных сессий не поддерживает. Можно и не вникать. Но тогда незачем браться.

   
 
 автор: ZuArt   (03.05.2007 в 14:08)   письмо автору
 
   для: Trianon   (03.05.2007 в 13:51)
 

=))) фактически это было офф-топ =))) аналогичный ответ человеку, который в другом топе мне так же ответил =)))

   
 
 автор: victoor   (03.05.2007 в 20:52)   письмо автору
 
   для: Aid   (03.05.2007 в 12:47)
 

А если попробывать сделать еще одну таблицу, куда закидывать id_сессии и id_пользователя и флаг на закрытие сессии (возможно, еще какие временные данные).
При авторизации пользователя проверять, есть ли уже запись на его id_пользователя в таблице сессий, если есть - ставить у уже имеющейся записи флаг на закрытие. Потом для входящего пользователя создавать запись.
При переходе пользователя проверять флаг на закрытие, если он установлен, убивать сессию, выводить пользователю сообщение о том, что под его ником зашли.
Для того, чтобы в таблице не накапливались данные о редкозаходящих посетителях, можно в таблицу сессий вносить еще время перехода и,например, раз в сутки удалять из этой таблице всех пользователей, чьи записи старше 1 дня (время взято произвольно, можно и чаще, и реже.

   
 
 автор: Aid   (04.05.2007 в 15:45)   письмо автору
 
   для: victoor   (03.05.2007 в 20:52)
 

спасибо за ответ...
но пожалуй лучше вовсе отказаться от идеи... Пусть себе логинятся... Там измыслю что-нибудь... Пока что и это не идеальное решение, ведь тогда можно и логиниться раз день или чаще, но всё же...
спасибо... Я лучше пока что откажусь от этой идеи...

   
 
 автор: Bronepoz[)   (05.05.2007 в 17:57)   письмо автору
 
   для: Aid   (03.05.2007 в 12:47)
 

В таблице с пользователями добавить столбец, в который записывать время последнего действия пользователя (просмотр страницы и т.д.). При авторизации сравнивать разницу между текущим временим и временем последнего действия пользователя. Если оно больше , допустим 5 минут, то пользователь в оффлайне. Время надо подбирать исходя из тематики ограниченной зоны сайта. Правда у этого способа есть серьёзный минус - при большом количестве пользователей обновление времени занимает много времени.

   
 
 автор: Trianon   (06.05.2007 в 00:32)   письмо автору
 
   для: Bronepoz[)   (05.05.2007 в 17:57)
 

>Правда у этого способа есть серьёзный минус - при большом количестве пользователей обновление времени занимает много времени

Да почему? Если таблицу онлайн пользователей сделать отдельно от основной - она будет относительно небольшой, пространство её данных будет закешировано и доступ будет мгновенным.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования