Должна ли обновляться сессионая кука ?

Должна ли обновляться сессионая кука ?

Товарищи, помогите, я в замешательстве.
Сессия держится не больше двадцати четырёх минут, а затем удаляется из каталога, где они (сессии) хранятся.
В php.ini выставлено следующее:
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
Из всего этого я понимаю, что по прошествии 24-ёх минут файлл сессии будет считаться устаревшим и как только запустится php-ый сборщик мусора (который удаляет старые сессии) файл будет удалён. Сборщик запускается, так сказать, с шансом 1 к 1000. что при частом обращении к сайту не так уж и много... примерно плюс ещё 5 минут. Все сесси хранятся в /tmp. Директория чистится каждый час, но удаляются только файлы, время существования которых болшье 9 часов, т.е. файлы сессий сюда никак не попадают.

Собственно вопрос в следующем - разве сессия не должна обновляться каждый раз, если пользователь вновь зашёл на страницу, пока у него не пропала сессия ?? Т.е. в моём случае, даже если прошло 23 минуты 59 секунд и пользователь опять загрузил страницу не должна ли сессия продлиться опять на 24 минуты, а не на 1 секунду, как получается ??

P.S. Просьба отвечать по теме, а не давать советы увеличить время жизни сессии где это только возможно. Заранее, спасибо.

-~{}~ 28.11.08 17:01:

Вопрос в теме не правильно задал - не сессионная кука, а сессионный файл. Куку браузер безуспешно шлёт на сервер, но соостветсвующего файла там к сожалению уже нету.
 

dimagolov

Новичок
писать в сессию что-то нужно, чтобы файл менялся и соответственно не чистился по таймауту
 
Да, точно. Пологаю вы правы. Ща проверю. Я туда сейчас точно повторно ничего не заношу, если вижу, что сессия есть.
 

Фанат

oncle terrible
Команда форума
dimagolov, не пиши чушь.

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

newARTix

Новичок
что-то я так и не понял.
session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and cleaned up. Garbage collection occurs during session start.

Замечание: If you are using the default file-based session handler, your filesystem must keep track of access times (atime). Windows FAT does not so you will have to come up with another way to handle garbage collecting your session if you are stuck with a FAT filesystem or any other filesystem where atime tracking is not available. Since PHP 4.2.3 it has used mtime (modified date) instead of atime. So, you won't have problems with filesystems where atime tracking is not available.
Так все-таки стандартный уборщик использует mtime или atime? И если mtime, то получается что стандартный хэндлер сессии при каждом запросе страницы с сессией, записывает файлу новый mtime?

Проверим... Исходные данные: Apache/1.3.31 (Win32) PHP/5.2.6

Код:
//session_save_path($path);

session_start();

//$_SESSION['data'] = 'Wow!';
//$_SESSION['data'] = rand();

echo filemtime(ini_get('session.save_path').'/sess_'.session_id());
Интересно, что если делать просто старт сессии и ничего туда не записывать, то пустой файл сессии создается в директории, но при каждом запросе перезаписи mtime этого файла не происходит. То есть пустой файл просто лежит, юзер ходит по страницам со своим session_id, а уборщик знать об этом не знает. И соответственно в один прекрасный момент файл исчезает и юзеру генерится новый session_id. (Стоп, здесь я ошибся, генерации нового session_id не происходит. Мы доверяем юзеру и берем тотже id, который он у нас запросил, овсе-равно сессия новая получается).
Если же в файл (сессию) хоть что-нибудь записать, то mtime файла начинает корректно изменяться при каждом запросе. При этом неважно, меняем мы данные в сессии или нет.

С одной стороны PHP все делает правильно, незачем хранить пустой файл, с другой стороны, нафига он его тогда создает если не обновляет?
Вопрос безусловно риторический.
 

dimagolov

Новичок
*****, я писал про файл, а не про куку, но так как писать пример обломался, то спорить не стал.
 

Фанат

oncle terrible
Команда форума
файл не может не обновляться. это, блин, очевидно.
вот куку как раз можно не обновлять. а если бы файл не обновлялся, то сессии не работали бы на половине сайтов
 

dimagolov

Новичок
Ну не совсем очевидно. Если сессия пустая, то файл создается, но не обновляется. А если не пустая то действительно, обновляется, по крайней мере на 5.2.6.

п.с. возможно, что на 5.1.4 она не обновлялась, так как у меня именно проблема исчезновения сессии при отсутствии изменений в ней имела место быть и боролся я с ней обновлением сессионной переменной. с тех пор не проверял, а cейчас проверил и убедился, что наличие хотя бы одной переменной гарантирует обновление сессионного файла
 

dimagolov

Новичок
Вася Патриков, что, была старая версия и вела себя как я описал про 5.1.4? просто мне самому интересно, это у меня год назад глюки были или таки да, чистилась сессия, если не менялось ее содержимое?
 
dimagolov
5.2.4 в качестве модуля.

PHP:
function isAuthenticated() {

    if (! isset($_SESSION)) {
        return false;
    }

    if (! isset($_SESSION['login'])) {
        return false;
    }

    if (! isset($_SESSION['password'])) {
        return false;
    }

    // данные авторизации.
    $authOptions = array(
        'login_col' => 'user',
         'pass_col' => 'password',
            'table' => 'auth_table'
    );

    if (! Authentication::isUser('DATABASE', $_SESSION['login'], $_SESSION['password'], '', $authOptions)) {
        return false;
    }

    // как подсказали умные люди, чтобы файл сессии обновлялся, в него надо хоть что то писать...
    $_SESSION['is_session_exists'] = true;
    
    return true;
}
Ну и соответственно без
PHP:
$_SESSION['is_session_exists'] = true;
не работало. Ф-ия вызывалась в всех скриптах.
 

Фанат

oncle terrible
Команда форума
Кто-нибудь еще из присутствующих сталкивался с такой же ситуацией?
Когда в сессии что-то есть, но она умирает через макс_лайфтайм после старта?
 

Фанат

oncle terrible
Команда форума
при чем здесь блин аплоад большого файла?
речь о нештатной работе сессий, а не о штатном выпадении по штатному таймауту
 
Сверху