Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сессия, переменная, вкладки


Автор: VasRip 20.2.2014, 14:08
Доброго всем здравия.

Есть такая проблема на сайт есть регистрация по имени и капча. Все работает гуд.
Проблема в том что все переменные хранятся в сессии. А когда открывается новая кладка она использует туже самую сессию что и первая вкладка и затирает все переменные первой вкладки.
Как это можно победить? 

Автор: bars80080 21.2.2014, 08:55
выявить смысловую нагрузку различных данных и оставить в сессии только те, что имеют отношение к сохранению данных пользователя в одной сессии

к примеру, исключая специфические задачи, в сессии имеет смысл хранить только одно: идентификатор авторизованного пользователя. для хранения всех прочих данных существует множество способов, начиная с БД и заканчивая файлами.

мне лично кажется, что вы храните в сессии многие данные только потому, что это "удобно" и "не надо заморачиваться с разными механизмами". однако, очевидно, в этом случае ваша архитектура приложения идёт лесом

Автор: VasRip 21.2.2014, 09:45
ДА так удобней поскольку мне хранить по факту нужно только 6 цифр номера пользователя и две даты по которым идет выборка из БД. Пользователь может только смотреть в БД.  Причем пользователь понятие совершенно абстрактное не как не связанное с каким-то конкретным лицом. Огромная защита там совершенная не нужна и хранение больших данных нет о пользователе. 
И какбы нет особого смысла нагружать сервак писанием в файл или в БД.

Автор: ksnk 21.2.2014, 12:20
VasRip, Что такое регистрация? Значит ли это, что зарегистрировавшийся юзер имеет право болтаться по сайту без постоянного заполнения имени и пароля? в том числе и открывать сайт в отдельной вкладке?

О чем вообще вопрос? О нелегкой жизни отладчика приложения? 

Можно открывать окно в "режиме инкогнито" в хроме. Или в другом профиле в Firefox.

Автор: VasRip 21.2.2014, 12:49
регистрация-> ввод "номера пользователя", и капчи. открывается другая страничка в тойже вкладке. там пользователь может только менять дату и наживать 1 кнопку которая выбирает из бд данные и выводит их.  И все.

просто суть в том что иногда может понадобится 1 человеку в ходить под разными "номерами пользователя" и смотреть одновременно данные по разным "номерам пользователя"

Автор: ksnk 21.2.2014, 13:27
VasRip, Нужно подумать над архитектурой приложения и "действительно ли оно нужно юзеру?"

Если, "да, именно так и надо", то
можно заводить "сессионный" ключик, генерировать его при регистрации, удалять по мере устаревания, и хранить его в javascript открытого окна. 
Общение окна с сервером должно вестись с помощью ajax. Каждый запрос серверу будет сопровождаться ключиком-дополнительным параметром. Если необходимо открытие нового окна, с тем-же "юзером", можно временно сохранять ключик в броузерных куках. 
Технически, задача решается, но уровень геморроя может местами зашкаливать.   

Автор: VasRip 21.2.2014, 13:36
ajax не вариант.  А вот хранить данные в javascript наверно стоит. нужно подумать  спс вам

Автор: AJIeKceuD 21.2.2014, 15:24
Я бы посмотрел на возможность поменять начальную логику. Две сессии в одном браузере... по-моему это утопия. Почему не сделать отдельно учетные записи и отдельно "номера пользователя"? И дать возможность в рамках одной учетной записи заводить несколько номеров пользователя.

Автор: VasRip 21.2.2014, 15:31
AJIeKceuD       я двумя руками ЗА. а вот заказчик хочет именно так (((((( 

Автор: AJIeKceuD 21.2.2014, 16:45
А нужны ли вообще куки и сессии? вбил пользователь номер и капчу, его перекинуло на страницу ...?number=123&pass=blablabla
pass сгенерирован в момент редиректа и связан с номером где-то в бд. Там у pass можно добавить срок жизни и т.д., это уже детали. 

Новая вкладка с новой формой авторизации перекинет на ?number=321&pass=blablabla2

Автор: VasRip 25.2.2014, 10:34
Решил проблему )))  через костыль ))) все также в сессиях и осталось и все такое только + костыль из 3 строк
Всем спс

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)