我正在运行一个基于网络的实验,学生登录网站并参加类(class)的练习测试。目前,学生使用以下代码从登录页面开始:
include_once("core/config.php");
include_once("core/db.class.php");
include_once("core/log.class.php");
session_start();
$debug = false;
$loginSuccess = "";
if (isset($_POST["submit"]))
{
$db = new DB($DbCatalog,$DbHost, $DbUser, $DbPass);
$log = new log($db);
foreach(array_keys($_POST) as $key)
{
$cleanParam[$key] = addslashes($_POST[$key]);
}
$result = $db->query("select count(*) as valid from Login where Email='" . $cleanParam["uname"] . "' and Pass='" . $cleanParam["pass"] . "'", $debug);
$line = $db->fetchNextObject($result);
if ($line->valid == 1)
{
$log_type = 'login-success';
$log_data = 'User '.$cleanParam["uname"].' successfully logged in';
$log->write($log_type, $log_data);
$_SESSION["logged_in"] = $cleanParam["uname"];
header("Location: index.php");
}
else
{
$log_type = 'login-error';
$log_data = 'User '.$cleanParam["uname"].' logged in failed with password '.$cleanParam["pass"];
$log->write($log_type, $log_data);
$loginSuccess = '<span class="errorMsg">Email/Password combination not found.</span>';
}
}
else
{
session_destroy();
}
?>
登录后,学生使用以下代码转到索引页面:
include_once("core/config.php");
include_once("core/db.class.php");
session_start();
if (!isset($_SESSION["logged_in"]))
{
header("Location: login.php");
}
$hdnUser = "";
$hdnUser = $_SESSION["logged_in"];
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Scientific Name Quiz</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="robots" content="noindex,nofollow">
<script language="javascript" src="quiz_database.js">
最后一段代码附加了实验问题和答案的数据库 (quiz_database.js)。但我现在正处于实验阶段,需要为每个登录的用户自定义数据库。
问题:如何修改上述代码,以便我可以根据登录时使用的用户名为每个用户附加一个特定的自定义数据库?
最佳答案
我认为你可以通过多种方式做到这一点:
正如您在评论中所写的 - 对于不同的用户有不同的脚本。因此,你会这样做
<script language="javascript" src="/<?php echo(generate_user_hash($cleanParam["uname"])); ?>/quiz_database.js">
- 因此每个用户都会有不同的、不可猜测的路径名(优点:实现速度快;缺点:难以管理,会随着用户数量的增加而增长)。为每个用户生成 js 文件:( PHP - generating JavaScript - 通常您只需要发送正确的 header
header("Content-Type: text/javascript");
尽管给定的问题显示了此类 PHP 生成的 JS 文件的样子)。虽然这种方法在有多个用户访问该网站的情况下并不明智(因为需要为每个用户独立生成 JS 文件),但它在这里仍然有效,因为每个 JS 文件都是不同的。 (优点:代码应该清晰易读和修改,因为您通常会为每个用户提供 block ;缺点:在语言之间移动时使用 PHP 处理 JS - 如果您有某种模板系统,或者正在存储问题,那就更容易在数据库中)有一个 js 文件,它向 PHP 处理程序运行类似 JSONP 的请求 - 例如您的
quiz_database.js
将只是执行从服务器接收到的问题函数的代理(优点:JS 和 PHP 是分离的,如果你不将问题存储在数据库中,你可以将每个问题(或每个用户的问题)在单独的文件中;缺点:更多的工作[但不是那么多]/需要保护问题,因此不同的用户无法访问其他人的问题)。 (类似于 JSONP,因为您可能希望在 JS 中处理不同的情况[用户访问自己的问题,而不是他们自己的问题])
就我个人而言,我会实现方法 3。我会将每个问题存储为单独的 JS 文件,并在数据库中维护用户有权访问的问题。我会创建一个函数(在 jquery 中 - 请将其视为如何处理接收到的数据的一般概念;我不知道您是否使用 jquery;因此这只是一个 stub )
function get_question()
{
$.ajax({
url: "/get_question/",
success: function(response)
{
if (response.error)
window.alert(response.error);
else
response.function();
}
});
}
这将被调用以获取最新问题的 JS 代码(当他们登录时,它将为每个用户加载不同的 JS 文件。然后你的 PHP Controller 只需提取正确的文件并将其用作文本。
关于javascript - 如何根据 PHP 登录为每个用户加载自定义的 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045094/