使用 PHP 进行身份管理
作者: , 出处:甲骨文OTN, 责任编辑: 叶江,
2007-05-24 10:50
了解如何在基于 PHP 的 Web 应用程序中实现身份管理……
分析基本 HTTP/HTTPS 身份验证代码。您输入用户名和口令之后,脚本将调用 verify_db_login() 函数。以下 PHP 代码演示了如何在领域中验证用户身份:
| // Declare control variable. $valid_user = false; // Authenticate user. if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))) if (verify_db_login($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'])) $valid_user = true; |
该函数将打开一个 Oracle 数据库连接,并检查凭证是否有效。如果凭证有效,verify_db_login() 函数将返回 true;如果凭证无效,则返回 false。如果缺少 SYSTEM_USER 表,代码将要求您检查缺少的表。Web 页面的主代码显示在该函数中:
| // Check for authorized account. function verify_db_login($userid,$passwd) { // Attempt connection. if ($c = @oci_connect(SCHEMA,PASSWD,TNS_ID)) { // Return a row. $s = oci_parse($c,"SELECT NULL FROM system_user WHERE system_user_name = :userid AND system_user_password = :passwd AND SYSDATE BETWEEN start_date AND NVL(end_date,SYSDATE)"); // Encrypt password. $newpassword = sha1($passwd); // Bind variables as strings. oci_bind_by_name($s,":userid",$userid); oci_bind_by_name($s,":passwd", $newpassword)); // Execute the query. if (@oci_execute($s,OCI_DEFAULT)) { // Check for a validated user, also known as a fetched row. if (oci_fetch($s)) return true; else return false; } else { // Print error when execution fails. $errorMessage = "Check for a missing SYSTEM_USER table. "; print $errorMessage; } // Close connection. oci_close($c); } else { $errorMessage = oci_error(); print htmlentities($errorMessage['message'])." "; } } |
对于 verify_db_function() 函数,需要注意两件事情。第一,查询返回一个空值,这将避免处理任何不必要的返回值。第二,明文口令使用 sha1() 函数加密,并指定给本地变量。
现在,您应该知道如何为基本 HTTP/HTTPS 身份验证构建所需的组件。与该身份验证模型相关的两个注意事项是:(1) 一旦您在浏览器中验证了凭证,即拥有完整的领域访问权;(2) 只能通过关闭所有浏览器窗口来注销。
Cookie 和会话模型。Cookie 和会话模型很常用,因为您可以让用户登录和注销 Web 应用程序而无需关闭所有浏览器窗口。该身份验证模型也比基本 HTTP/HTTPS 模型更加复杂。可以通过多种方式实现 Cookie 和会话身份验证。
- 本文关键词:

