Доступ к переменной сеанса и производительности - PullRequest
1 голос
/ 30 апреля 2009

У меня есть веб-приложение, внутри которого мне нужно проверить, достаточно ли у пользователя прав / ролей / прав для доступа к странице. Я установил права пользователей в таблице с USER_ID, ROLE_ID. и когда пользователь входит в приложение, я буду читать записи для этого пользователя и создавать строку и присваивать переменной сеанса. Когда вошедший в систему пользователь получит доступ к каждой странице, я прочту значение из переменной сеанса, а затем проанализирую строку и проверим, достаточно ли у этого пользователя назначено достаточно прав.

Теперь я боюсь, повлияет ли доступ к переменной сеанса при каждой загрузке страниц на производительность. Есть ли альтернативный способ решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 30 апреля 2009

нет, это не повлияет на производительность вашего сайта заметным образом (если у вас нет сотен пользователей в секунду).

но я кое-что заметил:

(...) Я буду читать записи для этого пользователя и конструировать строку и присваивать ей переменную сеанса. Когда вошедший в систему пользователь получит доступ к каждой странице, я прочту значение из переменной сеанса и затем проанализирую строку (...)

а-ха! видите, сессии - это не что иное, как строки, которые закодированы и проанализированы на session_start() (обычно для этого используются serialize() и unserialize()). вам не нужно вручную кодировать данные, которые вы собираетесь хранить в сеансе, это сделано для вас (и определенно быстрее, чем любой другой метод, потому что эти функции реализованы в ядре).

2 голосов
/ 30 апреля 2009

Вы должны увидеть чистый прирост производительности.

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

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

1 голос
/ 30 апреля 2009

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

Если вы хотите оптимизировать это, вы можете использовать какой-то кеш, где вы храните сессии. Может быть, кеш памяти, например APC или Memcache (см. Также этот комментарий к функции session_set_save_handler ).

0 голосов
/ 30 апреля 2009

Добавление к тому, что сказал Грег.

В php есть 2 типа сессий. Сеансы, хранящиеся в базе данных, и сеансы, хранящиеся в файле (обычно в / tmp / session_something);

Опция базы данных имеет издержки при создании сокета и отправке / получении данных. Он имеет такие преимущества, как возможность сеанса сохранять постоянство на нескольких серверах / машинах.

Второй вариант сохранения информации о сеансе в файле, вероятно, является лучшим для производительности, поскольку ОС, подобная Linux, может кэшировать / буферизовать записи в файл в памяти.

Итак, краткий ответ: даже не беспокойтесь об этом, это не пустая трата, не приманка, но если вы действительно заботитесь о производительности, вы бы не использовали PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...