Как я могу обновить сеансы данных по SID после отправки заголовков? - PullRequest
0 голосов
/ 27 декабря 2018

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

<php 
ini_set('session.save_path',__DIR__ . '/../!PHPSESSID');
session_start();


// ...... page content - db queries and other stuff. here can be generated some events

//close user connection and keep running script in background
ignore_user_abort(true);
//fastcgi_finish_request(); -- no need in my case
header('Connection: close');
header('Content-Length: '.ob_get_length());
session_write_close();
ob_end_flush();
flush();

//OK, user connection are closed. This script is running now in bacground
set_time_limit(120); // for me is more than enough - OR set 0

//... my database store all sids by each user id for each connections (e.g. same user, by id 123, have connections: 2 from pc(difrent browser), 1 from mobile .... ). I always know how ~ many connections user have and how to find him to send some events

if($haveSomeSpecificEvents){
    foreach($specificEvents as $item){
        if(!file_exists(session_save_path().'/sess_'.$item['sid'])){
            continue; //skip
        }

        session_id($item['sid']); // generate warning: headers already sent
        session_start(); // generate warning: headers already sent

        //check if session is what i am looking for like $_SESSION['id'] == $item['user_id'], if not - just skip this

        //place some updates (flag) in $_SESSION, but is always NULL.

        session_write_close(); // save changes

    }

 }

Конечно, я могу сделать запрос, используя CURL для моего домена - я думаю, что это не очень хорошая идея.

PS: английский - этоне мой родной язык

1 Ответ

0 голосов
/ 01 февраля 2019

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

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