Уничтожить сессию PHP через заданное количество времени (не из-за неактивности)

1

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

Я использую php для создания и оценки викторины. Каждый вопрос динамически генерируется, и пользователь должен нажать кнопку отправки, чтобы перейти к следующему вопросу, тем самым генерируя запрос к скрипту php.

Я хочу, чтобы у пользователя было всего 15 минут, чтобы завершить его. Другими словами, если пользователю требуется 6 минут, чтобы выполнить первые 3 проблемы, у пользователя осталось 9 минут, чтобы выполнить другие 3 проблемы.

Если вы установите неактивное время на 15 минут, то предположительно у пользователя есть 15 минут между запросами на веб-страницу, правильно? Это решение, на которое, как я полагаю, дает этот ответ.

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

спасибо

  • 3
    Я считаю, что вам лучше использовать сессию + куки для проверки таймера. Кроме того, если вы хотите завершить сеанс с помощью запроса, я бы создал сеанс и сохранил этот ключ сеанса или идентификатор в базе данных, затем проверял бы его при каждом запросе, и по истечении 15 минут. В результате, в тот момент, когда пользователь отправляет запрос, сеанс будет проверен на истекшее время и либо примет ответ, либо отклонит его с сообщением, что время истекло.
  • 2
    См. Stackoverflow.com/questions/520237/…
Теги:
session
session-variables

1 ответ

1

Я больше читал ссылку, которую я опубликовал, которая была столбом, и нашла ответ, который имел несколько голосов, но не был выбран как лучший, написанный @Rafee. Однако он выполнил то, что я хотел. Вот этот код:

login.php

<?php
  session_start();
?>

<html>
    <form name="form1" method="post">
        <table>
            <tr>
                <td>Username</td>
                <td><input type="text" name="text1"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="pwd"></td>
            </tr>
            <tr>
                <td><input type="submit" value="SignIn" name="submit1"></td>
            </tr>
        </table>
    </form>
</html>

<?php
    if ($_POST['submit1']) {
        $v1 = "FirstUser";
        $v2 = "MyPassword";
        $v3 = $_POST['text'];
        $v4 = $_POST['pwd'];
        if ($v1 == $v3 && $v2 == $v4) {
            $_SESSION['luser'] = $v1;
            $_SESSION['start'] = time(); // Taking now logged in time.
            // Ending a session in 30 minutes from the starting time.
            $_SESSION['expire'] = $_SESSION['start'] + (30 * 60);
            header('Location: http://localhost/somefolder/homepage.php');
        } else {
            echo "Please enter the username or password again!";
        }
    }
?>

Homepage.php:

    <?php
    session_start();

    if (!isset($_SESSION['luser'])) {
        echo "Please Login again";
        echo "<a href='http://localhost/somefolder/login.php'>Click Here to Login</a>";
    }
    else {
        $now = time(); // Checking the time now when home page starts.

        if ($now > $_SESSION['expire']) {
            session_destroy();
            echo "Your session has expired! <a href='http://localhost/somefolder/login.php'>Login here</a>";
        }
        else { //Starting this else one [else1]
?>

Я не был полностью осведомлен о том, как работает session_start, но теперь я понимаю, что он должен быть включен в файлы php, которые будут использовать переменные сеанса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню