2009-03-07 3 views

ответ

2

Я думаю, что существует два варианта, но они не идеальны, но вот они.

1) Если у вас есть доступ к файловой системе, вы можете проверить временную метку создания файла сеанса.

2) Храните время создания в сеансе, например.

session_start(); 
if(! isset($_SESSION['generated'])) { 
    $_SESSION['generated'] = time(); 
} 
+0

Ваш пример будет отменять значение для каждого запроса. – Gumbo

+0

Вы правы, я только демонстрировал идею не в реализации. –

2

Вы можете просто сохранить метку, на которой сеанс был создан в сессии

6

Вы можете сохранить время, когда сеанс был инициализирован и вернуть это значение:

session_start(); 
if (!isset($_SESSION['CREATED'])) { 
    $_SESSION['CREATED'] = time(); 
} 

И для извлечения, что информация с произвольной сессии:

function getSessionLifetime($sid) 
{ 
    $oldSid = session_id(); 
    if ($oldSid) { 
     session_write_close(); 
    } 
    session_id($sid); 
    session_start(); 
    if (!isset($_SESSION['CREATED'])) { 
     return false; 
    } 
    $created = $_SESSION['CREATED']; 
    session_write_close(); 
    if ($oldSid) { 
     session_id($oldSid); 
     session_start(); 
    } 
    return time() - $created; 
} 
+0

Ваш код пахнет мне, потому что вы не возвращаете сеанс жизни! Вы просто возвращаете время, в которое оно было создано, но имя метода - getSessionLifetime(). Вместо этого ваш метод следует называть getSessionStartTime() или изменить метод для вычисления фактического прошедшего времени. – RibaldEddie

+0

Вы правы, спасибо. – Gumbo

+0

Кроме того, не беспокойтесь о возврате false. ЕСЛИ вы собираетесь рассчитать время жизни сеанса, а затем возвратите ноль, так как сеанс был жив для единиц нулевого времени. ЕСЛИ вы собираетесь получать время начала сеанса и сеанс является новым, тогда вы захотите вернуть time(). – RibaldEddie

Смежные вопросы