Управляем временем жизни сессии.

Тема в разделе "PHP", создана пользователем sam3000, 4 апр 2011.

Модераторы: latteo
  1. sam3000

    sam3000 Создатель

    Регистр.:
    2 окт 2007
    Сообщения:
    13
    Симпатии:
    1
    Авторизация реализована на сессиях. Использовал все варианты предложенные гуглем и на сайте/форуме php.net
    Пробовал даже указывать время для cookies (сессия это специфические куки же).

    Кто-нибудь реализовывал это?
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Может конечно глупость сморожу, но всё же... если сделать в базе метку времени создания сессии, а в скрипте проверку на срок действия сессии. При окончании срока убивать сессию и перебрасывать пользователя куда нужно...
    PHP:
    <?php
    if(time()>$base['end_session']){//где $base['end_session'] взятая из базы метка времени окончания срока действия сессии
    session_destroy();
      foreach(
    $_SESSION as $key=>$val)
        unset(
    $_SESSION[$key]);
      
    ?>
    <script language=javascript>parent.location.href='./index.php';</script>
    <?php
    }
    ?>
    ну дето так...
     
  3. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    ini_set('session.gc_maxlifetime''твое_время_в_секундах');  
     
  4. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    есть несколько вариантов сесии
    1- полным ее сохранением и бд или фаиле, для чего для того что бы жестко отслеживать кто когда и что делал, так же и время можно держать, для неактивных сессий, более 10 минут отрубать это уже кроном вычищать.
    2- пологатся на встроеный механизм, и делать время жизни сесии, + в добавок в самой сесии хранить время, тем самым если человек поднял старую сессию, то просто отрубить ее.

    PHP:
    session_cache_expire20 ); // 20 минут время жизни кеша сессии
    session_start(); 
    $inactive 1200// 60*20 = минут
    if(isset($_SESSION['start']) ) {
        
    $session_life time() - $_SESSION['start'];
        if(
    $session_life $inactive){
            
    header("Location: user_logout.php");
        }
    }
    $_SESSION['start'] = time();
     
  5. sam3000

    sam3000 Создатель

    Регистр.:
    2 окт 2007
    Сообщения:
    13
    Симпатии:
    1
    Пробовал. Может как-то не правильно, но через 20 минут сессия умирала.

    dino, эм, мне не это надо.

    XSiteCMS, спасибо, такого варианта не видел. Завтра попробую, отпишусь.
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Если у тебя сессия хранится в файлах(по умолчанию временная директория temp(или tmp)), то ее содержимое очищается через некоторое время независимо от времени жизни сессии. Попробуй указать свою директорию для хранения сессий.