За последние 24 часа нас посетили 17559 программистов и 1724 робота. Сейчас ищут 1632 программиста ...

сессии в БД

Тема в разделе "PHP и базы данных", создана пользователем Konstant_IN, 13 апр 2006.

  1. Konstant_IN

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

    С нами с:
    13 апр 2006
    Сообщения:
    5
    Симпатии:
    0
    Хочу сделать обработку сессия и хранение их средствами MySQL.
    Для этого начал читать мануал по PHP, дабы вообще понять, как это все делается. вот тут.
    Но как оказалось, пример недоработанный, либо я чего-то недопонимаю.

    Проблема намба уан: Когда файл типа sess_jsdhfjwayhfjashd уже создан и пуст, при вызове функции read() наблюдается большой выброс варнингов, и кстати, понятно почему: возвращаемое значение не должно быть пустым. Итого, заменил функцию

    Код (Text):
    1.  
    2. function read($id)
    3. {
    4.   global $sess_save_path, $sess_session_name;
    5.  
    6.   $sess_file = "$sess_save_path/sess_$id";
    7.   if ($fp = @fopen($sess_file, "r")) {
    8.     $sess_data = fread($fp, filesize($sess_file));
    9.     return($sess_data);
    10.   } else {
    11.     return(""); // Must return "" here.
    12.   }
    13.  
    14. }
    своим кодом

    Код (Text):
    1.  
    2. function read($id)
    3. {
    4.   global $sess_save_path, $sess_session_name;
    5.  
    6.   $sess_file = "$sess_save_path/sess_$id";
    7.   if (($fp = @fopen($sess_file, "r"))&&(filesize($sess_file))) {
    8.     $sess_data = fread($fp, filesize($sess_file));
    9.     return($sess_data);
    10.   } else {
    11.     return(""); // Must return "" here.
    12.   }
    13.  
    14. }
    Ладно, пускай с этим разобрался. Но поясните мне пожалуйста, господа, смысл каждого аргумента функции session_set_save_handler.

    PS: Про write, read я уже понял.

    Заранее благодарю за содержательные ответы.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    все, что тебе для этого надо, это ID сессии. А в базу пиши все, что хочешь по этому ID.

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

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

    С нами с:
    13 апр 2006
    Сообщения:
    5
    Симпатии:
    0
    я и хочу отказаться от стандартных сессий, хочу лишь понять как работает функция session_set_save_handler, не в примере, а вообще, в php. Точнее ее аргументы, кроме известных мне

    Ведь именно эта функция дает ID фактически и как-то регулирует данные у сессии.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Konstant_IN
    хочешь отказаться - откажись. тогда и функции стандартные не юзай, а напиши свои.

    а функция эта переопределяет функции, которые отвечают за работу сессии, при стандартных вызовах. там в примере все есть. что не понятно-то?
     
  5. Konstant_IN

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

    С нами с:
    13 апр 2006
    Сообщения:
    5
    Симпатии:
    0
    Вот ее описание
    bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )
    Непонятно вот что: Что делает переопределяемая функция open, close.
     
  6. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Выполняет действия при открытии и закрытии сеанса.
     
  7. Konstant_IN

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

    С нами с:
    13 апр 2006
    Сообщения:
    5
    Симпатии:
    0
    а чем close отличается от destroy тогда?
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Konstant_IN
    open - создание, открытие
    close - закрытие, но сам файл остаетя жить до следующего применения.
    destroy - уничтожение файла по истечении некоторого времени не активности пользователя.

    например php подчищает просроченные сессии осле 1000 заросов
     
  9. ONK

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

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Я отказался от стандартных сессий из-за того, что она блокирует параллельные обращения одного пользователя. Реализация собственных сессий на MySQL даёт существенный рост производительности скрипта (самописные сессии работают в 2 - 3 раза быстрее родных ПХП сессий).
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ONK
    я то же давно работаю со своими сессиями и очень доволен, т.к. можно вытворять все, что угодно ...
     
  11. Konstant_IN

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

    С нами с:
    13 апр 2006
    Сообщения:
    5
    Симпатии:
    0
    Благодарю за помощь. Напишу свои сессии :)