За последние 24 часа нас посетили 16848 программистов и 1641 робот. Сейчас ищут 929 программистов ...

Вопрос скорее не по PHP, а про Веб-сервер

Тема в разделе "PHP для новичков", создана пользователем Ega23, 16 апр 2008.

  1. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Просто не знаю, куда с вопросом обратиться.

    Вопрос такой: а что такое сессия с точки зрения Apache?

    Сначала попробую свои "соображения" описать.
    Локальная сеть, в сети находятся: сервер БД (возможно не один), сервер приложений (возможно не один), сервер "пользователей" и Веб-Сервер.
    Пользователь заходит на веб-сервер, авторизуется через него на сервере пользователей и далее начинает работу с сервером приложений (или с серверами). Они, в свою очередь, имеют доступ к БД. Соединения между Веб-сервером и серверами пользователей и приложений идёт через FastCGI (чистый exe на C, никаких PHP и Perl).
    Соответственно, авторизация пользователя должна проводиться один раз на каждое открытие браузера.
    Как вариант: при успешной авторизации пользователю выставляется кука (например, GUID) с временем жизни до закрытия браузера. Соответственно, эта кука также прописывается в БД и сервер приложений всегда по ней знает, что это Вася Пупкин, а не Люба Пирожкова.
    Собственно, ощущаю некоторое беспокойство: вот, например, пользователь на обед ушёл, а браузер не закрыл. Апач-сессия (судя по документации) будет убита через 24 минуты. И тут юзверь приходит с обеда и продолжает работу. Кука у него та же самая. По-идее, он уже авторизовался, значит должен продолжать работать. А апач сессия (и, возможно, те FastCGI-процессы, которые были с ней ассоциированы, уже прибиты). Ну это можно обойти, например, увеличив тайм-аут сессии с 24 минут до, например, двух часов.
    Но тут уже другое дело начинается: допустим, я открыл браузер, авторизовался, подумал - и закрыл его к лешему. Потом через 3 минуты подумал - и снова открыл. И так несколько раз. Насколько я понимаю, сервер никак не может узнать о том, что я закрыл браузер. Может это узнать только косвенно - по отсутствию предыдущей куки. Но тогда получается, что все предыдущие мои сессии будут болтаться в памяти сервера до истечения тайм-аута.

    Так вот, ещё раз вопрос: а что такое сессия с точки зрения Apache?
    Это какой-то дополнительный поток? Просто некий "массив" в памяти? Можно ли этими сессиями как-то управлять на серверной стороне?

    Буду рад любым советам, ссылкам на мануалы, хелп и т.п. Сколько не гуглил, выдают ссылки на php и perl сессии... :(

    З.Ы. Прошу не обсуждать архитектуру комплекса, мол "зачем всё так сложно". Поверьте, она родилась не просто так.
    З.З.Ы. Прошу прощения за некий сумбур в изложении.
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Apache ( по крайней мере у меня ) не знает слова "Сессии", этим занимается PHP и точка.

    Вы описали, примерно, работу PHP по установке и работе с сессиями: PHP устанавливает куку, PHP проверяет ее, PHP создает файлы, PHP читает данные с этих файлов.

    В этом нет ничего сверхестественного: обыкновенная логика, Вы можете создать свой механизм сессий.
    Если речь идет не о PHP приложении, то двигаетесь Вы в нужном направлении.
     
  3. Anonymous

    Anonymous Guest

    С точки зрения апача - это файлик на диске. Как правило, но есть исключения. )
     
  4. Anonymous

    Anonymous Guest

    Где такое написано?
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  6. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Блин, сейчас найти не могу. Где-то читал на днях... :)
     
  7. Anonymous

    Anonymous Guest

    Prooflink, or didn't happen!!!
     
  8. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Во, тут и прочитал:

    Правда, сессия может пропасть и без закрытия браузера. В силу ограничений, рассмотренных в самом главном разделе этого FAQ, механизм сессий не может определить тот момент, когда пользователь закрыл браузер. Для этого используется таймаут – заранее определенное время, по истечении которого мы считаем, что пользователь ушел с сайта. По умолчанию этот параметр равен 24 минутам.
     
  9. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Короче, немного перефразирую вопрос:
    Что происходит в Апаче, когда в php-скрипте я пишу session_start;?

    (Очень не хочется в исходники лезть...:) )
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    ничего
     
  11. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Это точно?
     
  12. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Вы же сами описали механизм. Все что Вам нужно от сервера, так это установить куку и прочитать куку. Чего же боле?
     
  13. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Поищи в документации Апача слово "сессии". Если найдёшь - сюда ссылку кинь.
    А пока ты читал только доки про сесии в PHP. И ссылаешься именно на PHP-шные сессии.
     
  14. Ega23

    Ega23 Активный пользователь

    С нами с:
    20 фев 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Дубна
    Да, похоже ты прав. Ежа с ужом путал...