Auth 指南
这个袖珍指南的目的是建立一个系统,这个系统能够容易地使用验证机制保护你的网站。
在需要保护的网站顶部放置下面的代码段:
Example 21-1. 典型的使用范例 PEAR::Auth require_once "Auth.php";
function loginFunction()
{
/**
* Change the HTML output so that it fits to your
* application.
*/
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "<input type=\"text\" name=\"username\">";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
}
$dsn = "mysql://user:password@localhost/database";
$a = new Auth("DB", $dsn, "loginFunction");
$a->start();
if ($a->checkAuth()) {
/**
* The output of your site goes here.
*/
} |
这几行代码用例子展示了验证系统
上面第一行脚本包含了你的PEAR目录的文件,它包含了运行所需的所有代码.
PEAR::Auth. 接下来,我们定义了一个函数显示一个登录表单,你的页面的访问者必须在这里输入他的登录数据。你可以改变这个函数里所有的 HTML
格式。
因为我们应该使用一个数据库检验登录数据,我们现在创建一个变量 $dsn, 它包含了一个有效的DNS字符串,这个DNS字符用来经由
PEAR::DB连接数据。 至于是默认的数据库表方案或者使用不同的贮藏容器,
请看下一节更多的信息.
然后我们创建了一个验证对象authentication。第一个参数定义贮藏容器的名称。因为我们想要使用数据库驱动的贮藏容器,我们把"DB"传递到这里。第二歌参数试容器驱动程序的连接参数。我们使用先前定义的DSN字符串。第三个参数是我们在脚本开头定义的函数的名称。这个函数显示了登录表单。
现在我们的验证对象已经初始化了,我们需要检查用户是否已经登录,这就要通过方法
checkAuth(). 如果它返回 TRUE, 我们就可以把我们的页面传送给用户.
|
Example 21-2. 使用可选择的验证 require_once "Auth.php";
function loginFunction()
{
/**
* Change the HTML output so that it fits to your
* application.
*/
echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "?login=1\">";
echo "<input type=\"text\" name=\"username\">";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
}
if (isset($_GET['login']) && $_GET['login'] == 1) {
$optional = true;
} else {
$optional = false;
}
$dsn = "mysql://user:password@localhost/database";
$a = new Auth("DB", $dsn, "loginFunction", $optional);
$a->start();
echo "Everybody can see this text!<br />";
if (!isset($_GET['login'])) {
echo "<a href=\"test.php?login=1\">Click here to log in</a>\n";
}
if ($a->getAuth()) {
echo "One can only see this if he is logged in!";
} |
这是一个关于可选择的登录功能的相当精致的例子:最后的参数$optional 可以是 TRUE
或者 FALSE. 如果它是FALSE, 登录表单就不会显示,而用户只会看到文字"Everybody can see this text!"。如果他点击了上面这些文字的链接,他会获得同样的页面但所带的GET参数"login=1"。现在他可以在登录表单输入他的登录信息。如果他成功登录,他会看到文字"Everybody can see this text!"和"One can only see this
if he is logged in!"。
|
在下面的一节中我们将介绍关于函数PEAR::Auth更多的细节。
下面的SQL语句在MySQL默认数据库验证方案中创建了一个可用的表:
CREATE TABLE auth (
username VARCHAR(50) default '' NOT NULL,
password VARCHAR(32) default '' NOT NULL,
PRIMARY KEY (username),
KEY (password)
); |
这是验证工作需要的表和字段名称. 使用MD5对密码进行加密是
PEAR::Auth默认的加密方法, 密码长度必须少于32个字符.当使用其他的加密方法例如
DES ("UNIX
crypt"), 密码长度应做相应的变化。