这是今天web课程的笔记,亲自尝试了前面两种验证方式,第三种方式之前也有所接触,还都算比较好理解。后面还有一些数据库的简单解释。
验证用户方法
1. HTTP自带的验证
这种方式是利用HTTP所提供的验证头信息来对用户进行身份验证。由于这种凡是对大量的使用者缺乏有效的管理,在用户太多时并没有太大用处,因此少量用户时使用。例如开发人员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php // 如果 $PHP_AUTH_USER 不等于 "tea",就进不去网站。 if($_SERVER['PHP_AUTH_USER'] !='tea' || $_SERVER['PHP_AUTH_PW'] !='ok'){ //通过头部信息告知浏览器验证 header('WWW-Authenticate: Basic realm="「需验证」---请输入账户/密码"'); header('HTTP/1.0 401 Unauthorized'); echo "账号或密码错误。请刷新重新输入。"; //记得要加上 exit() 离开,不然就跟没有验证一样了! exit(); } /* 如果用户输入正确的账户和密码,下面的 HTML 就会显示 */ ?> <HTML> <HEAD> <TITLE></TlTLE> </HEAD>
<BODY> <P>Hello World!</P> </BODY> </HTML>
|
2. htaccess
方式的验证
这种凡是其实时Apche所提供的加强版HTTP验证方式,利用Apche所提供的htpasswd
来设定使用者账号和密码。但是任然不适用过多用户。
首先建立用户数据(授权的动作)
1 2 3 4 5 6 7 8 9 10 11 12 13
| // 第一次 -c,第二次添加就不需要了 c:\appserv\apache\bin> htpasswd -c htusers Tom New password: ←输入用户密码 Re-type new password: ←再次输入 Adding password for user Tom
c:\appserv\apache\bin> htpasswd htusers Jack New password: Re-type new password: Adding password for user Jack
// 可以将不同的人进行分组,group是群组名称 group:Tom Jack
|
然后在需要权限才可以进入的路径中建.htaccess
文档(将已授权和访问地址联系到一起)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // 显示给用户看的提示 AuthName "登陆时需要输入账号和密码「账号」与「密码」" // 验证时不编码 AuthType Basic // 之前建立的用户数据 AuthUserFile c:\appserv\apache\bin\htusers #AuthGroupFile c:\appserv\apache\bin\htgroup // 所有访问的都需要验证 require valid-user #require user jollen #require group ieem316 // 定义说拒绝所有,允许个别 order deny,allow deny from all #allow from .nthu.edu.tw allow from 140.114.70.31
|
3. 数据库存储用户数据
最有效,最普遍的做法,将用户的账户和密码存在数据库中,每次登陆到数据库中查找数据,最后返回有无和正确性。
准备工作
- 登陆的表单
- 登陆的程序
- 建好用户的资料库,至少要包括账号和密码
步骤
- 通过表单获取用户账号与密码
- 到数据库中查找对应的账号和密码
- 失败就返回重新获取信息,直到成功为止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| // 本程序通过头信息获取的用户的账户和密码 <?php // 如果用户沒有输入账户,要求用户重新验证。 IF(!isset($PHP_AUTH_USER)){ header('WWW-Authenticate: Basic realm="请输入账号和密码"'); header('HTTP/1.0 401 Unauthorized'); echo "刷新后重新登陆"; exit(); } else{ mysql_connect("localhost","admin","asdee4") or die ("无法连接 MySQL"); rnysql_select_db("members") or die("无法连接数据库"); $query="select id from users where username='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'"; $result=mysql_query($query); $n_rows=mysql_num_rows($result); mysql_close(); // 当row<1时,用户账号与密码有错,重新登陆 if($n_rows < 1){ header('WWW_Authenticate: Basic realm="请输入账号和密码"'); header('HTTP/1.0 401 Unauthorized'); echo "刷新重新登陆"; exit(); } } ?>
|
数据库
数据库系统 = 数据库管理系统 + 数据库
DBMS(数据库管理系统):database management system
DB(数据库):database
SQL(structure query language):结构化查询语句
- 第一代:89
- 第二代:92(绝大部分数据库所遵循的规则)
- 第三代:99(没有成立)
DDL(data definition language):数据库和数据表定义语言
- create
- database
- table
- drop
- database
- table
- alter(改变数据库的结构)
- table
DML(data manipulation language):数据处理语言
- select(查询)
- insert [into](添加)
- delete(删除)
- updata(单个属性的改变)
DCL(data control language):数据库控制语言
使用者
- DBO(database operater)
- DBA(database administrator):root/password
简单的结构
DB Server(数据库服务器)
DB(数据库)
table(数据表)
record()
field
charset
流程
- 链接数据库
- use/create:database
- create:table/改变资料表里面的数据
数据库操作方法
- 通过程式(php)
- 通过命令行
- -u:使用者
- -h:主机
- -p:密码
- 通过图形界面(软件)
PHP & 数据库
1. 连接数据库
1 2
| $db = mysql_connect(数据库主机名称或ip,数据库账号,数据库密码); or die("无法连接数据库服务器");
|
2. 使用数据库
1 2
| mysql_ select_db(名称,$db); or die("无法连接数据库");
|
3. 对数据进行操作
4. 用变量对数据进行存取
1
| $result = mysql_query($sql,$db);
|
5. 最后关闭数据库
当取到数据的时候就可以关掉了,这样可以降低数据库风险。
注
- sql指令可以大小写,但各种数据库名称和数据表名称要区别大小写。