Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 19:55   #1
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию Механизм сессий и БД. Оптимизация

Ситуация:Пишу проект, который предполагает активную работу с данными из БД (базы данных) и высокие нагрузки по числу пользователей. Известно, что для запроса к БД требуется определённое время, а так как работа активная, то запросов очень много. Я бы хотел оптимизировать этот процесс и использовать для хранения определённых данных сессии. Т.е.:
- при подключении загонять данные из БД в сессии,
- потом пользователь работает с данными сессии,
- в определённый момент данные из сессии сохранять в БД.
Вопросы:
- Насколько приемлема такая схема?
- Какие могут быть проблемы?
- Когда и как лучше сохранять данные из сессий в БД?
Виталий Желтяков вне форума Ответить с цитированием
Старый 13.05.2010, 21:01   #2
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

В сессии ни в коем случае нельзя хранить конфиденциальную информацию. Большому кораблю большое,как говорится, плавание, а раз такое дело, не лишним будет позаботиться об отдельном сервере баз данных.
Vertexxx вне форума Ответить с цитированием
Старый 13.05.2010, 21:11   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
В сессии ни в коем случае нельзя хранить конфиденциальную информацию
Почему? Я не слышал об проблемах безопасности связанных с сессиями.
Виталий Желтяков вне форума Ответить с цитированием
Старый 14.05.2010, 00:40   #4
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Потому что, если Вы не позаботитесь в достаточной мере о безопасности сессии, а так же самой логики работы приложения, я смогу перехватить сессию (пусть через HTTP это сделать не так просто) и прочитать все конфиденциальные данные. Не подвергайте заведомой опасности тех, кого приручите.
Vertexxx вне форума Ответить с цитированием
Старый 14.05.2010, 07:42   #5
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Сообщение от Vertexxx Посмотреть сообщение
Потому что, если Вы не позаботитесь в достаточной мере о безопасности сессии, а так же самой логики работы приложения, я смогу перехватить сессию (пусть через HTTP это сделать не так просто) и прочитать все конфиденциальные данные. Не подвергайте заведомой опасности тех, кого приручите.
Как Вы можете перехватить сессии?
Виталий Желтяков вне форума Ответить с цитированием
Старый 14.05.2010, 09:04   #6
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
и прочитать все конфиденциальные данные
Прочитать данные вы не можете. Перехватив идентификатор сессии вы можете "стать другим пользователем", и увидеть данные, которые видит он, но прочитать что-то из сессии нельзя, тк с сессиями работают только серверные скрипты.
Цитата:
Вопросы:
- Насколько приемлема
Сессия будет храниться в файле на hdd, соответсвенно если их(сессий) станет много то рабоать это будет не быстреее mysql, выяснить будет ли лучше можно тестрованием. Для высоконагруженных приложений сессии и результаты запросов к бд сохраняют в memcached.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 14.05.2010, 11:19   #7
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
Сообщение от mv28jam Посмотреть сообщение
Прочитать данные вы не можете. Перехватив идентификатор сессии вы можете "стать другим пользователем", и увидеть данные, которые видит он, но прочитать что-то из сессии нельзя, тк с сессиями работают только серверные скрипты.
Ну нельзя же быть настолько буквальным! Я что, сказал, что я буду сессию читать?
Vertexxx вне форума Ответить с цитированием
Старый 15.05.2010, 08:36   #8
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Ну нельзя же быть настолько буквальным! Я что, сказал, что я буду сессию читать?
Цитата:
я смогу перехватить сессию (пусть через HTTP это сделать не так просто) и прочитать все конфиденциальные данные
Vertexxx, пожалуйста, не постите, если не разбираетесь в данном вопросе.

Цитата:
Перехватив идентификатор сессии вы можете "стать другим пользователем", и увидеть данные
Возможность перехвата индефикатора сессии - это ошибки пользователя. Подделать идентификатор доольно сложно, и практически не возможно, если использовать дополнительную защиту (Uger Agent + SecretKey).
Цитата:
Для высоконагруженных приложений сессии и результаты запросов к бд сохраняют в memcached.
К сожалению, в моём проекте возможно перекрывание потоков, поэтому использование memcached опасно.
Виталий Желтяков вне форума Ответить с цитированием
Старый 17.05.2010, 09:20   #9
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Возможность перехвата индефикатора сессии - это ошибки пользователя. Подделать идентификатор доольно сложно, и практически не возможно, если использовать дополнительную защиту (Uger Agent + SecretKey).
Сильно улучшит при мин затратах, + можно сохранять ip, или первые 3 части если ip динамический.
Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
К сожалению, в моём проекте возможно перекрывание потоков, поэтому использование memcached опасно.
Не зная всей картины не могу сказать как этого избежать, но хранение сессий в memcached ничем не отличается от хранения в файлах, кроме скорости. Так что вы зря. Правда php есть баги связанные с хранением сессий нестандартными механизмами, если всё таки решите, могу подкинуть код и решение проблемы php.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 17.05.2010, 16:36   #10
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Сильно улучшит при мин затратах, + можно сохранять ip, или первые 3 части если ip динамический.
Вариант бесспорно хороший - Я наверно так и сделаю.
Цитата:
Не зная всей картины не могу сказать как этого избежать, но хранение сессий в memcached ничем не отличается от хранения в файлах, кроме скорости. Так что вы зря. Правда php есть баги связанные с хранением сессий нестандартными механизмами, если всё таки решите, могу подкинуть код и решение проблемы php.
У меня система слишком сложная и возможно двойное обращение к одним и тем же данным хранимым в сессии. В memcached нет блокировки от двойного обращения, что может привести к "плохим" результатам.
Виталий Желтяков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать выход и уничтожение сессий? reyn90 PHP 2 15.03.2010 16:57
Помогите выбрать механизм взаимодействия Mixasik БД в Delphi 5 06.07.2009 22:36
Механизм регистрации на сайте Devoto PHP 4 26.03.2009 20:44
Как работает механизм сессий? vlad-55 PHP 7 21.02.2009 21:25
составил программу ,но ненравиться механизм работы.помогите улучшить Василийпрог Помощь студентам 1 23.11.2008 11:38