Как правильно держать пользователей вошедшими в систему в течение определенного периода времени с помощью session.gc_maxlifetime с использованием php - PullRequest
0 голосов
/ 23 февраля 2019

Здравствуйте, у меня есть встроенная система управления пользователями для моего проекта.

Я работаю с языком программирования php.

Более того, моя цель здесь состоит в том, чтобы пользователи вошли как минимумгод, если они не решат выйти из системы.

так что же я сделал?

я увеличил session.gc_maxlifetime до "31536000" из моей cpanel, где размещен мой проект.

Мое второе действие состояло в том, чтобы затем создать время сеанса, соответствующее установленному мною gc_maxlifetime.

, который я прочитал отсюда

/564097/kak-mne-zakonchit-seans-php-cherez-30-minut

   if (!isset($_SESSION['CREATED'])) {
   $_SESSION['CREATED'] = time();
   } else if (time() - $_SESSION['CREATED'] > 31536000) {
   session_regenerate_id(true);    
   $_SESSION['CREATED'] = time(); 
   }

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

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

session.gc_maxlifetime

1 Ответ

0 голосов
/ 23 февраля 2019

Проблема с sessions заключается в их изменчивой природе - если пользователь закрывает браузер или происходит отключение питания и т. Д., Сеанс обычно завершается.Если вы установите cookie-файл, он будет сохраняться, если произойдет любое из вышеперечисленных действий - нет необходимости использовать сеанс, но вы можете использовать cookie-файл для создания сеанса, как показано ниже.

Я проверил это, отредактировав вручнуюзначение expiry хранится в файле сеанса для эмуляции старой метки времени.Надеюсь, это поможет.

$cookiename  = 'extended-login';
$sessionname = 'created';

/* expiry: current time + 1year in seconds ( approx ) */
$expiry = time() + ( 60 * 60 * 24 * 365 );
$domain = $_SERVER['SERVER_NAME'];
$path = '/';
$secure = true;
$http = true;

/*
    create a cookie so that even if the browser closes the session can be re-established
    but will maintain the initial expiry time - provided the cookie is not deleted...
*/
if( empty( $_COOKIE[ $cookiename ] ) ) setcookie( $cookiename, $expiry, $expiry, $path, $domain, $secure, $http );
if( empty( $_SESSION[ $sessionname ] ) && isset( $_COOKIE[ $cookiename ] ) ){
    $_SESSION[ $sessionname ]=(object)array( 
        'expiry'    =>  $_COOKIE[ $cookiename ],
        'active'    =>  0
    );
}

if( !empty( $_SESSION[ $sessionname ] ) && !empty( $_COOKIE[ $cookiename ] ) ){
    if( time() > $_SESSION[ $sessionname ]->expiry ){
        /* 
            destroy the cookie & session as the current 
            time is now greater than the year timestamp 
            set in the cookie
        */
        if( ini_get( 'session.use_cookies' ) ) {
            /* get the parameters of the cookie so we can unset it */
            $obj = (object)session_get_cookie_params();
            setcookie( $cookiename, '', time() - 42000, $obj->path, $obj->domain, $obj->secure,$obj->httponly );

            /* kill the session */
            session_destroy();

            /* optionally redirect the user somewhere */
            exit( header('Location: ?session=terminated') );
        }
    } else {
        /* update the session to indicate last active time */
        $_SESSION[ $sessionname ]->active=time();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...