Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> session_write_close 
V
    Опции темы
animegirl
Дата 31.8.2012, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Такой технический вопрос.
Прочитала в мануале следующие:
Цитата

Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.


И задумалась, блокировка начинается после session_start(); или после первого изменения в супермасиве $_SESSION?

Добавлено через 3 минуты и 10 секунд
И если после старта, имеет ли смысл закрывать сразу сессию, и открывать её заного в одном скрипте?
Или как вариант открывать, копировать массив, закрывать, а в конце скрипта, ещё раз скидывать обратно обновления?


--------------------
Скажи миру - НЯ!
PM   Вверх
Sanchezzz
Дата 31.8.2012, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 2
Всего: 60



Это механизм работает так

Открыли сессию создался пустой файл или считался и получили глобальный массив $_SESSION

после того как что то сделали и скрипт завершил выполнения данные записываются
если вызвать session_destroy то данные удаляются.

Механизм сессии и хранения данных можно изменять фактически он меняется при 2 случаях с ростом проекта и когда нужно организовать сессии на несколько машинах одни и теже.


Код

// Переопределения методы сессии на свои  функций 
// PS $self_handle_driver это объект класса что бы показать откуда брать функцию грубо говоря)))
session_set_save_handler(
    array($self_handle_driver, "open"),     // при открытии сессии
    array($self_handle_driver, "close"),     // при завершении сессии
    array($self_handle_driver, "read"),      // чтение
    array($self_handle_driver, "write"),     // запись
    array($self_handle_driver, "destroy"), // уничтожение сессии
    array($self_handle_driver, "gc")          // авто очистка сессии 
);
register_shutdown_function('session_write_close');
session_start();


Вообще правильное использование сессии в высоконадежных проектах где используются сессии под только авторизацию.
Должны стартовать только когда пользователь авторизовался.
Чего мы добиваемся таким методом мы экономим ресурсы и наделаем лишнии действия

Пока  не забыл хранения сессии можно организовать где угодно файле(стандартный механизм) оператива (memcache)  БД, и другие кеш системы которых более 5+.


Это сообщение отредактировал(а) Sanchezzz - 1.9.2012, 18:46


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
animegirl
Дата 31.8.2012, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



На данный момент оставляю файловые сессии, вопрос в другом, имеет смысл их закрывать в ручную, или забить на это?
Я в них храню ещё некоторые данные часто используемые, как например тот же ИД юзера, зачем каждый раз базу напрягать такими вопросами.


--------------------
Скажи миру - НЯ!
PM   Вверх
animegirl
Дата 31.8.2012, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Я сейчас заметила интересную вещь, не смотря на то, что закрыла сессию, всё равно могу туда записи делать. В чём тогда смысл?


--------------------
Скажи миру - НЯ!
PM   Вверх
Sanchezzz
Дата 1.9.2012, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 2
Всего: 60



Цитата

Я сейчас заметила интересную вещь, не смотря на то, что закрыла сессию, всё равно могу туда записи делать. В чём тогда смысл? 

Нужно смотреть конкретный пример в моем случаи работает как надо 
Код

session_start();
    print_r($_SESSION);
    
    $_SESSION['test1'] = '1';
    session_write_close();
    $_SESSION['test2'] = '2';


1 запуск выдаст пустой массив
2 запуск вернет только ['test1'] =1;

Причем если что то добавленное было $_SESSION то оно там хранится до тех пор пока его не удалят например тем же unset
Было бы интресно посмотреть на ваш пример.


Это сообщение отредактировал(а) Sanchezzz - 1.9.2012, 19:21


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
animegirl
Дата 1.9.2012, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Сейчас глянула, всё-таки я профукала, не записывается, там видимо когда проверяла, была старая запись, я решила, что всё равно работает  smile

Добавлено через 1 минуту и 14 секунд
Но кстати, на данный момент, я всё же решила закрывать запись, так как у меня больше чтения в коде, нежели записей.


--------------------
Скажи миру - НЯ!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.