出什么问题了,贴出来看看。是不是session不好用.你要用CGI的方式运行php

解决方案 »

  1.   

    上一问题已经解决。
    请问大哥,怎样实现php认证功能,服务器该怎样配置。
      

  2.   

    <?php
    session_start();if (empty($HTTP_SERVER_VARS["PHP_AUTH_USER"]) or empty($HTTP_SERVER_VARS["PHP_AUTH_PW"])) { /* 输入不正确 */
    Header("WWW-Authenticate: Basic realm=\"密码认证\"");
    Header("HTTP/1.0 401 Unauthorized");
    $login_flag = 0;
    require (dirname(__FILE__)."/denied.php");
    exit();
    } else { /* 有输入则进行数据库查询 */
    $login_user = $HTTP_SERVER_VARS["PHP_AUTH_USER"];
    $login_pass = $HTTP_SERVER_VARS["PHP_AUTH_PW"]; require (dirname(__FILE__)."/connect.inc.php";
    $query = "SELECT id,pass,auth FROM userauth WHERE user='$login_user'";
    $result = mysql_query($query, $db_id) or die("使用数据表时发生错误!"); if (mysql_num_rows($result)==0) { /* 无该用户 */
      Header("WWW-Authenticate: Basic realm=\"密码认证\"");
    Header("HTTP/1.0 401 Unauthorized");
    $login_flag = 1;
    require (dirname(__FILE__)."/denied.php");
    exit();
    } else {
    $row = mysql_fetch_array($result);
    if ($login_pass != $row["pass"]) { /* 密码不正确 */
    Header("WWW-Authenticate: Basic realm=\"密码认证\"");
    Header("HTTP/1.0 401 Unauthorized");
    $login_flag = 2;
    require (dirname(__FILE__)."/denied.php");
    exit();
    } elseif (($row["auth"]&0x01)==0) { /* 帐号被禁止 */
    $login_flag = 3;
    require (dirname(__FILE__)."/denied.php");
    exit();
    } else { /* 登陆成功则将用户常用信息采用SESSION暂存 */
    session_name($row["id"]);
    $AUTH=$row["auth"];
    session_register("AUTH");
    mysql_free_result($result);
                      }
    }
    }
    ?>所用数据库为mysql,除了id,auth字段为整形其余字段均为字符型,字段长度可自己调整;
    其中id,user为UNIQUE
    所require的文件都要和本文件在同一目录,denied.php自己写一个就可以了。
    connect.inc.php如下:
    <?php
    $Server_host = "localhost"; /* MYSQL 主机名 */
    $Server_user = "root"; /* MYSQL 用户名 */
    $Server_passwd = ""; /* MYSQL 口令 */
    $Server_db = "test"; /* MYSQL 数据库名 */set_magic_quotes_runtime(0);$db_id = mysql_connect($Server_host, $Server_user, $Server_passwd) or die("无法连接到数据库服务器!");
    mysql_select_db($Server_db, $db_id) or die("不能使用指定的数据库!");
    ?>
    后面需要认证的程序可以通过判断$AUTH是否已经注册过,以及根据$AUTH不同的值(用位运算)来确定程序执行的流程。
    php.ini中必须将 variables_order 设为 EGPCS
    关于这部分内容我也不是太懂,这里抛砖引玉,希望......高手之所以是高手,是因为他从不帮助别人吗?hmm...