Что делать, если сессии PHP уже запущены? - PullRequest
1 голос
/ 02 сентября 2010

Я делаю что-то вроде «модуля», который включается в другое не связанное с PHP приложение. В моем «модуле» мне нужно использовать сеансы. Однако я получаю исключение «сеанс уже начался ...». Приложение, в которое входит мой «модуль», запускает сеанс. Если я не могу отключить сеансы в этом приложении, каковы мои варианты? Я хотел бы использовать Zend_Session, но на первый взгляд кажется, что это невозможно. Однако, может быть, есть другой способ? Есть идеи?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 02 сентября 2010

В реализации сессий PHP может быть только один сеанс за раз. Вы можете использовать session_id, чтобы проверить, существует ли в данный момент сеанс:

if (session_id() === '') {
    // no current session
}

Теперь, если активный сеанс уже существует, вы можете завершить его с помощью session_write_close, измените имя идентификатора сеанса на session_name, чтобы избежать конфликтов, начните сеанс, и восстановите старый сеанс, когда закончите:

$oldName = session_name();
if (session_id() !== '') {
    session_write_close();
}
session_name('APPSID');
session_start();

// your session stuff …

session_write_close();
session_name($oldName);
session_start();

Единственная проблема в этом заключается в том, что реализация сеанса PHP отправляет только идентификатор сеанса последнего запущенного сеанса обратно клиенту. Поэтому вам нужно установить прозрачный идентификатор сеанса (попробуйте output_add_rewrite_var) и / или файл cookie сеанса (см. setcookie) по своему усмотрению.

1 голос
/ 02 сентября 2010

Попробуйте установить пользовательский параметр "name" для вашего приложения.

По умолчанию PHPSESSID. Вы можете изменить его на PHPSESSID_MYAPP, чтобы избежать конфликтов с другим приложением.

0 голосов
/ 02 сентября 2010

Добавьте следующий код, прежде чем использовать функцию сеанса:

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