Увеличьте время ожидания сеанса на PHP веб-сайте на SHARED HOSTING - PullRequest
0 голосов
/ 13 июля 2020

Я уже перепробовал все возможные решения из Stack Overflow. Но ни один из них не работает. Недавно я узнал о том, что в Shared Hosting у нас есть другой способ сделать это. Если бы кто-нибудь мог подробно помочь мне о том, как это сделать, чтобы сеанс оставался активным в течение как минимум 24 часов.

ini_set('session.gc_maxlifetime', 86400);

Это не решает мою проблему до вызова запуска сеанса.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Проверьте, что установлено в session.save_path.

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

В этом случае вам следует изменить этот параметр, чтобы использовать свой собственный каталог. (Этот каталог, конечно, не должен быть общедоступным через HTTP.)

0 голосов
/ 13 июля 2020

Я не уверен, что это решение для вас, но я опубликую, как я это сделал.

Я выхожу из системы через XX минут, но для сохранения сеанса в реальном времени я вызываю файл с помощью ajax и сбрасываю сессий. Если мое установленное время истекает, я уничтожаю сеанс. Это, конечно, будет работать только в том случае, если страница все еще открыта.

В заголовке я установил:

if(!empty($_SESSION['afkTime'])){
    unset($_SESSION['afkTime']);
}

В тегах <head></head> я проверяю, как пользователь времени журнала неактивен:

<script>
    var refreshSn = function ()
    {
        var time = 1200000; // 20 mins | 1min = 60000 miliseconds 
        setTimeout(
            function ()
            {
                $.ajax({
                    url: 'refresh_session.php',
                    cache: false,
                    success: function (data) { refreshSn(); console.log(data); if(data=='AFK logout'){ location.reload(); } }
                });
            },
            time
        );
    };

    // Call in page
    refreshSn()
</script>

In refresh_session.php, если время AFK больше, чем установленное мной время, и если да, то я выхожу из системы:

<?
session_start();

    if(empty($_SESSION['afkTime'])){
        $_SESSION['afkTime'] = 1200000;
        $_SESSION['login_user'] = $_SESSION['login_user']; //REWRITE SESSION TO KEEP IT
        $_SESSION['session_id'] = $_SESSION['session_id']; //REWRITE SESSION TO KEEP IT
        echo 'AFK started';
        die();
    }else{
    
        if(!empty($_SESSION['afkTime']) && $_SESSION['afkTime']>= 7200000){
            unset($_SESSION);
            session_destroy();
            echo 'AFK logout';
            die();
        }else{    
            $_SESSION['afkTime'] = $_SESSION['afkTime']+1200000;
            $_SESSION['login_user'] = $_SESSION['login_user']; //REWRITE SESSION TO KEEP IT
            $_SESSION['session_id'] = $_SESSION['session_id']; //REWRITE SESSION TO KEEP IT
                   
            echo 'AFK '.$_SESSION['afkTime'];
            die();
        }
    }
...