背景:我正在設計一個在線虛擬教室管理系統......它通過在教師創建時生成隨機會話密鑰(md5(time))來工作教室並將其存儲在數據庫中。在設定的過期時間(例如5分鐘)後刪除數據庫行
要訪問教室,學生訪問唯一的教室網址,代碼將URL中的會話密鑰(使用GET)與數據庫中的會話密鑰進行比較。如果有匹配,教室就會顯示。
的URL通常是這樣的:/classroom.php?instance=a529501db8373609f2d47a7843a461ea
編碼需要幫助:我希望我的老師也可以設置一個會話「長度」,所以教室是訪問15分鐘,25分鐘或50分鐘。
當因爲教室的創建時間超過實例25分鐘,然後會話密鑰被從數據庫中刪除,教室不能再訪問。
我有什麼至今:
當教師點擊按鈕來創建classroo的PHP下方存儲會話密鑰($實例),並在數據庫中的會話長度($時間).. 。
<?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頁面上的代碼片段檢查是否會話過期...如果它是它刪除它從數據庫中。
<?php
$currentTime = time();
if ($currentTime > $duration){
// Connect to database and delete the row
} else {
// show the classroom
}
?>
任何幫助或建議將不勝感激!
UPDATE ----
感謝所有偉大的答案,在這裏是怎麼工作的時刻...
在createclassroom.php頁我存儲實例還有NOW()日期和時間,持續時間爲NOW()+ $ _ POST [「時間」]; ...
<?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頁我只檢查會話實例是沒有過期。
<?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');
}
?>
現在我只需要決定如何經常清理數據庫。真的,我想感謝你們的幫助,正是我需要的!
爲什麼不給老師一個*關閉空間*按鈕,將數據庫中的值設置爲false,因此無法訪問?最好保留這樣的東西,以供審查/不快樂的學生復活等。 –
這是我見過的最快的迴應,好主意!將不得不考慮我將如何實現這個想法,以及它是否解決了我所有的問題。謝謝。 –
您需要在數據庫中存儲課程可用時間(開始時間和日期)和持續時間。通過這種方式,您可以將持續時間添加到開始並計算用戶嘗試登錄時類是否關閉 –