我已经阅读了很多关于在一段时间后销毁PHP会话的帖子,但许多答案都没有说明该解决方案是否适用于不活动或一段时间。让我解释一下。
我正在使用php来生成和评分测验。每个问题都是动态生成的,用户必须点击提交按钮才能转到下一个问题,从而生成对php脚本的请求。
我希望用户只有15分钟的时间来完成它。换句话说,如果用户需要花费6分钟来完成前3个问题,那么用户还有9分钟可以完成其他3个问题。
如果您将非活动时间设置为15分钟,那么用户可能会在15分钟之间对网页发出请求,对吗? This是我相信这个答案的解决方案。
但是,这不是我需要的。我需要会话从开始起15分钟后终止,无论用户最后一次请求是什么时候。
谢谢
答案 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文件中。