我已经构建了一个自定义CMS来更新我的网站。通常我所做的是,我提到了一个php文件的数据库登录信息(如username-host-password),并将该文件包含在所有具有数据库语法的php脚本文件中。通过这样做,我通过该特定数据库用户访问数据库。
我要做的是用登录用户替换该特定数据库用户。更清楚的是,如果用户John登录到CMS,他将使用用户名john访问数据库。如果用户Doe已登录,他将使用用户名joe访问数据库。
这样做的主要动机是跟踪在mysql数据库中更新表的用户。
请你们为我提供一个如何做到这一点的概念。
谢谢!
答案 0 :(得分:1)
我总是将username / userid存储在他们的会话中,并在我的数据库中保存一个名为logs的表。我记录每个查询,时间,用户ID和用户名,以便我可能有一个如下所示的条目: 'select * from foo','1','mike','7/1/2014 1:45 pm'
它变得非常大,所以我必须每隔一段时间清除一次,但对于大多数这些应用程序,只有我们的技术人员使用这些应用程序,所以它最多只有20人左右,所以它并没有那么糟糕。当有人说你的应用程序做了一个嘘声时,它也有助于排除故障。您可以返回并查看他们正在做什么,并查看执行了哪些服务器查询。
答案 1 :(得分:1)
其实我可以在这里做。我有一个php文件,我在所有页面中都使用require_once。它被称为日志,并在其中具有一个功能:
require_once("db_connection.php");
date_default_timezone_set('America/Chicago');
function logIt($msg,$tablename="",$application="" )
{
global $connection;
$cleanedMsg = remove_single_quotes($msg);
$userID = "0";
if ( isset($_SESSION['USERID']))
{
$userID = $_SESSION['USERID'];
}
$postDate = addHoursToTime(0);
$query = "insert into web_log_tab (message, userid, post_Date, app, tablename) values ('{$cleanedMsg}',{$userID},'{$postDate}','{$application}','{$tablename}')";
odbc_exec($connection,$query);
}
然后在我在php中调用的每个查询之后,我只需调用logIt fufnction并传入查询,表名和应用程序。在我的例子中,多个应用程序正在访问数据库,因此我可以按应用程序,用户甚至tablename过滤掉。我希望这会更有意义并且有所帮助。当用户通过登录页面登录我的应用程序时,我将他们的用户名,用户ID,用户级别放在他们的私人会话中,这样我就可以随时随地访问应用程序。
$webPassword = $row['password'];
if ( $webPassword == $hashedPassword)
{
$_SESSION['USERID'] = $row['id'];
$_SESSION['FIRSTNAME'] = $row['first_name'];
$_SESSION['USER_LEVEL'] = $row['user_level'];
echo '{success:true,error:0,id:'.$row['id'].'}';
}
当然你可以存储用户的用户名并使用那个insead,我只是喜欢这个id,我会在以后加入我需要的任何信息。