在设定的时间之后销毁PHP会话(不是由于不活动)

时间:2015-11-16 00:24:18

标签: php session session-variables

我已经阅读了很多关于在一段时间后销毁PHP会话的帖子,但许多答案都没有说明该解决方案是否适用于不活动或一段时间。让我解释一下。

我正在使用php来生成和评分测验。每个问题都是动态生成的,用户必须点击提交按钮才能转到下一个问题,从而生成对php脚本的请求。

我希望用户只有15分钟的时间来完成它。换句话说,如果用户需要花费6分钟来完成前3个问题,那么用户还有9分钟可以完成其他3个问题。

如果您将非活动时间设置为15分钟,那么用户可能会在15分钟之间对网页发出请求,对吗? This是我相信这个答案的解决方案。

但是,这不是我需要的。我需要会话从开始起15分钟后终止,无论用户最后一次请求是什么时候。

谢谢

1 个答案:

答案 0 :(得分:1)

我更多地阅读了我发布的链接,这是一个Stack Overflow帖子,并且找到了一个答案,其中有几个投票但没有被选为最佳,由@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文件中。