Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Хранение данных пользователя [5]
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Squirrel пишет:
Пяточек, ты уж определись, что ты хочешь (анекдот)
Я вам уже советовал перечитать топик сначала? кажется, да...
Я хочу максимум возможностей управления сессией с минимальным геммороем. Ваше предложение урезает возможности, увеличивая количество лишних телодвижений, при этом ни на толику не повышая безопасность. Докажете обратное - посыплю голову пеплом.
на вопрос 2. Не понятно, чем лучше обращение в двум файлам, вместо одного (файла сессии). вы не ответили. Я и Саныч предложили решения при которых сессия завершается\обновляется прозрачно для пользователя и не нужно лезть в базу.
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 19 Августа, 2013 - 18:01:38
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
PS
обращаться к этой табличке нужно будет при входе, выходе и удалении пользователя
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Squirrel
Отправлено: 20 Августа, 2013 - 00:07:39
Забанен
Покинул форум
Сообщений всего: 147
Дата рег-ции: Авг. 2013
Помог: 4 раз(а)
[+]
caballero пишет:
термин сессия вполне понятен (тем кто в теме) и не зависит от контекста
Вот в данном контексте лично мне он как раз и не понятен. Если ты такой умный, то объясни, что такое в данном контексте "сессия", если это не кука, не содержимое куки, и не файл, то тогда что?
caballero пишет:
не факт - сериализуешь туда класс а он тянет за собой все остальные по ссылке
А зачем засовывать туда весь класс?
caballero пишет:
у меня апач под виндой больше десяти лет. не вижу никаких проблем и никакой то разницы с другими местами стояния.
А я например вижу. Как тут сказали, "тем кто в теме" разница очевидна. Ссылочку то почитай, там как раз разжевано. (Добавление)
Саныч пишет:
Вот если б вы читали, что пишут другие, то заметили б, что ID сессии пользователя пишется в базу. При удалении сначала зачитываем этот ID, потом грохаем запись в таблице.
Ты теоритизировать то брось, а просто прикинь как это будет работать в реале. Если грубо, ты формируешь страничку admin.php , на которой выводишь логин пользователя/(или что ты там хочешь), и рядышком кнопочку "удалить". Я правильно поняла твою задумку?
Теперь опустимся до реальной жизни. Кнопочка будет снабжена ссылочкой, типа:
/user_del.php?UID=$UID&SID=$SID.
Сразу вопрос. Ты так печешься о безопасности. На сколько такая страничка будет безопасна в реальной жизни? Если ты передаешь только один параметр, то тебе придется по любому получать второй из БД Это первое обращение. Что бы удалить пользователя, из BD, тебе придется дернуть и саму БД. Это уже второе обращение. Ну и каким-то образом прибить саму сессию, это уже третье обращение. Даже если ты передаешь все два параметра, обращений будет ДВА, а ты твердишь, что одно.
Мой же вариант, более безопасен. В user_del ты передаешь только $SID, и на странице admin, ты в открытом виде выводишь ТОЛЬКО $SID.
Второй момент. Ты должен как-то защить вызов user_del от злоумышленника и робота.
Мелкий пишет:
Докажите это хотя бы теоретически.
Саныч пишет:
С каког это перепуга?
При открытии сессии, указывается время ее жизни. Если сессия жива после указанного времени, это говорить только о рукожопости админа, настраивавшего сервер.
Мелкий: Кста, твоя ссылка не открылась.
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
Squirrel пишет:
/user_del.php?UID=$UID&SID=$SID.
Сразу вопрос. Ты так печешься о безопасности. На сколько такая страничка будет безопасна в реальной жизни? Если ты передаешь только один параметр, то тебе придется по любому получать второй из БД Это первое обращение. Что бы удалить пользователя, из BD, тебе придется дернуть и саму БД. Это уже второе обращение. Ну и каким-то образом прибить саму сессию, это уже третье обращение. Даже если ты передаешь все два параметра, обращений будет ДВА, а ты твердишь, что одно.
Мой же вариант, более безопасен. В user_del ты передаешь только $SID, и на странице admin, ты в открытом виде выводишь ТОЛЬКО $SID.
Второй момент. Ты должен как-то защить вызов user_del от злоумышленника и робота.
Передаем только userID. Получили, зачитали sessID, запустили сессию, очистили ее, удалили юзера из БД. Два запроса, где вы третий выкопали, я не понимаю.
И где я говорил про один запрос? Я специально пролистал назад, не нашел.
К тому же, что вы так этих двух запросов к базе при удалении пользователя боитесь, что готовы на каждый запрос дергать файл и искать в нем айдишник?.. Вы что на столько часто пользователей удаляете?.. Я нет. И если и будет пара лишних запросов, как вам кажется, к базе за неделю, так это вобще ничего.
Squirrel пишет:
При открытии сессии, указывается время ее жизни. Если сессия жива после указанного времени, это говорить только о рукожопости админа, настраивавшего сервер.
Я так погляжу, у вас все рукожопые, и админы всех серверов, и программисты из гугла. Так что ж вы с нами, рукожопыми, тут возитесь, а?!
По теме, кем и куда указывается? И советую почитать, как организован GC в PHP, может поймете наконец, что сессия может и полгода пролежать, а потом благополучно будет возобновлена.
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
LIME
Отправлено: 20 Августа, 2013 - 09:10:59
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
народ....как там говориться?
не кормите троля?
DelphinPRO
Отправлено: 20 Августа, 2013 - 09:58:05
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Белка такая белочка )
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 20 Августа, 2013 - 17:27:57
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Товарищи, ну тема так и не раскрыта. Как поддерживать авторизацию и корректно удалять/банить пользователя? При этом не трогая БД при простой навигации по сайту.
Я вот что надумал.
В таблице пользователей есть поле session.
При входе пользователя на сайт, пишем в это поле его session_id.
При навигации по сайту не трогаем базу - не нужен нам его session_id
Если нужно удалить пользователя или изменить его права, то у нас есть его session_id
Далее:
Пользователь ушел с сайта. Неважно как - нажал кнопку выйти или просто закрыл окно. Ничего не делаем с его session_id.
При следующем входе обновляем поле session. Если пользователь входит по куке, то делаем тоже самое - обновляем session_id в базе.
Я ничего не упустил? (Добавление)
В догонку еще такой вопрос, немного не по теме.
Озадачился я вчера реализацией статуса online, offline.
Забабахал в таблице юзеров поле - status (0 и 1). А потом понял, что лоханулся. Начал гуглить на эту тему. Оказывается поле status в базе совершенно бессмысленно, так как пользователь может просто закрыть браузер и все - кто обновит поле status?
Неужели нет иного способа реализации статуса кроме записи и сравнения времени? Ведь это опять запрос к БД при каждом запуске скрипта.
Например нужно сделать некий модуль, который выводит 10-20 юзеров online. Или выводить список всех пользователей у каждого из которых есть статус - online/offline. Ну как на форуме вообщем.
Здесь на форуме я так понял тоже по времени. Чтож это, при каждом обновлении страницы/переходе - запрос к БД и сравнение временных меток?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
soffrick
Отправлено: 20 Августа, 2013 - 17:36:14
Посетитель
Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012 Откуда: Россия, Москва
----- Правильный вопрос - уже половина правильного ответа!
p.s. индусы повсюду, будьте осторожны!
LIME
Отправлено: 20 Августа, 2013 - 17:39:13
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Hapson пишет:
Как поддерживать авторизацию и корректно удалять/банить пользователя?
самостоятельно реализовать механизм сессий в базе
Hapson
Отправлено: 20 Августа, 2013 - 17:47:30
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
LIME
Объясните мне, что значит сессии в базе, что понимается под этим?
В базу пишется session_id, в базу пишутся сессионные данные... так? Зачем? А как удалять данные при выходе пользователя, если он просто закрыл окно?
Чем плох мой вариант выше? Цель ведь достигнута - корректно удалять пользователя и обновлять его права. В базу нужно лазить только при необходимости, а не при каждом запуске скрипта. А так пусть сессиями рулит php. Нам нужен лишь session_id< чтобы очистить или обновить сессию
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Vinyl
Отправлено: 20 Августа, 2013 - 17:50:22
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
После продолжительного холивара у меня вопрос: чем мой вариант-таки не устроил? Или все же ТС пишет авторизацию на веримегахайлоад, на котором один запрос к базе при одном обращении к скрипту - непосильный груз?
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
механизм полностью реализуй
напиши класс Session
не пользуйся встроенным session_start вообще
caballero
Отправлено: 20 Августа, 2013 - 17:50:41
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
есть возможность использовать для хранения сесий не файлы а БД.
С точки зрения кода ничего не меняется. Но появляется возможность прибивать старые болтающиеся сессии кроном.
но проблема яйца выеденного не стоит - не трать времмя и усилия на частности.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.