- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
背景:我正在设计一个在线虚拟教室管理系统...它的工作原理是在教师创建教室时生成随机 session key (md5(time)) 并将其存储在数据库中.
为了访问教室,学生访问唯一的教室 url,代码将 url 中的 session key (使用 GET)与数据库中的 session key 进行比较。如果匹配,则显示教室。
URL 通常如下所示:/classroom.php?instance=a529501db8373609f2d47a7843a461ea
需要编码方面的帮助:我希望我的老师也能够设置类(class)的“长度”,以便类可以访问 15 分钟、25 分钟或 50 分钟。
当教室创建后的时间超过例如 25 分钟时, session key 将从数据库中删除,教室将无法再访问。
我目前拥有的:
当老师点击按钮创建类时,下面的 PHP 会在数据库中存储 session key ($instance)和 session 长度($duration)...
<?php
session_start();
if (isset($_SESSION['id'])) {
if (isset($_POST['hidden'])) {
// Connects to the database
include_once("$_SERVER[DOCUMENT_ROOT]/classes/includes/dbconnect.php");
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Sets the session duration
$currentTime = time();
$duration = $currentTime + $_POST['duration'];
// Session variables
$uid = $_SESSION['id'];
$usname = $_SESSION['username'];
// To generate the random hash from the current time
$time = time(); // time to hash
$instance = md5($time); // hash stored in variable
// Stores the session hash (instance) and duration in the instance database
$query = ("INSERT INTO `my-db-name-foo`.`instances` (`instance`, `expiry`) VALUES (`$instance`, $duration`);");
mysql_query($query) or die(mysql_error());
// Closes the database connection
mysql_close();
// Redirects the teacher header('Location:classroom.php?instance='.$instance);
}
} else {
echo 'Please login';
die();
}
?>
然后在实际的 classroom.php 页面上有一段代码检查 session 是否已过期...如果是,则将其从数据库中删除。
<?php
$currentTime = time();
if ($currentTime > $duration){
// Connect to database and delete the row
} else {
// show the classroom
}
?>
如有任何帮助或建议,我们将不胜感激!
更新----
感谢所有出色的回答,这是目前一切的工作方式...
在 createclassroom.php 页面上,我将实例以及 NOW() 日期和时间以及持续时间存储为 NOW() + $_POST['duration'];...
<?php
session_start();
if (isset($_SESSION['id'])) {
if (isset($_POST['duration']) && !EMPTY($_POST['duration'])) {
// Connects to the database
include_once("$_SERVER[DOCUMENT_ROOT]/classes/includes/dbconnect.php");
// Session variables
$uid = $_SESSION['id'];
$usname = $_SESSION['username'];
// To generate the random hash from the current time
$time = time(); // time to hash
$instance = md5($time); // hash stored in variable
// $duration = $_POST['duration'];
$duration = $_POST['duration'];
// Stores the hash (instance) in the instance database
$sql = ("INSERT INTO `xxx_xxxx`.`instances` (`id`, `teacher`, `instance`, `startdate`, `expiredate`) VALUES ('$uid', '$usname', '$instance', NOW(), NOW() + $duration);");
$query = mysqli_query($dbConnect, $sql)or die(mysql_error());
// Redirects the teacher
header('Location:classroom.php?instance='.$instance);
} else if (isset($_POST['hidden'])) {
echo 'Please select a duration';
}
} else {
echo 'Please login';
die();
}
?>
在实际的 classroom.php 页面上,我只检查未过期的 session 实例。
<?php
session_start();
// Connects to the database
include_once("$_SERVER[DOCUMENT_ROOT]/classes/includes/dbconnect.php");
$instance = $_GET['instance']; // GETs instance from URL
$usname = $_SESSION['username']; // Gets teacher name
// script to retrieve all the Instances in the database and store them in a variable '$dbInstance'
$sql = "SELECT instance, expiredate FROM instances WHERE instance = '$instance' AND instances.expiredate > NOW()";
$query = mysqli_query($dbConnect, $sql);
$row = mysqli_fetch_row($query);
$dbInstance = $row[0];
if ($dbInstance == $instance){
echo $dbInstance.'<br>';
echo $instance;
} else {
echo $dbInstance.'<br>';
echo $instance.'<br>';
die('Instance not initiated');
}
?>
现在我只需要决定我想如何经常清除数据库。真的,我要感谢你们的帮助,这正是我所需要的!
最佳答案
这种行过期通常按如下方式处理:
DATETIME
在每一行中。 INSERT INTO tbl (id, expiration) VALUES (whatever, NOW() + INTERVAL 5 MINUTE)
AND tbl.expiration > NOW()
的内容在查询中。这将使过期的行看起来消失了。DELETE FROM tbl WHERE tbl.expiration <= NOW()
这比实际尝试 DELETE
更容易,时间也更精确。过期的行在它们过期的那一刻。它还可以应对即时 DELETE 操作的失败,并且可以很好地扩展。
关于php - 在设定的到期时间(例如 5 分钟)后删除数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129934/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!