Это можно сделать:
$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])
, но я не думаю, что это доступно, и я хочу это только в определенных случаях.