PHP session_start без касания файла сессии - PullRequest
0 голосов
/ 11 октября 2018

У меня есть JavaScript setInterval(), который пингует сервер каждые 15 секунд или около того.

Проблема заключается в том, что пользователь искусственно продлевает сеанс, так как пользователь сам может бездействовать.

Каков наилучший способ получить информацию, которую я получил бы от session_start(), не затрагивая фактический файл сеанса?Другими словами, мой звонок не повлияет на продление срока действия сеанса.

1 Ответ

0 голосов
/ 18 октября 2018

Это можно сделать:

$session = $_COOKIE['PHPSESSID']; //obvs. you must know the name
$path = ini_get('session.save_path') . '/sess_' . $session; //your session file syntax may vary

// now read the file.  Note this doesn't touch the file open time, I've tested it
$string = implode('', file($path));

// parsing session string syntax to array looks complex, so do this:
$fp = fopen( substr($path, 0, strlen($path) - 3) . '---', 'w' );
fwrite($fp, $string);
fclose($fp);

// open the created file and let PHP parse it:
session_id( substr($session, 0, strlen($session) - 3) . '---' );
session_start();

// now we correct the Set-Cookie header that would contain dashes at the end
header_remove('Set-Cookie');
setcookie('PHPSESSID', $session);

// and, we're good to go having read the session file but not touched/affected it's expiry time!

Очевидно, я бы предпочел сделать что-то вроде session_start(['read_without_affecting_expiry' => true]), но я не думаю, что это доступно, и я хочу это только в определенных случаях.

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