这是今天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. 建好用户的资料库,至少要包括账号和密码

步骤

  1. 通过表单获取用户账号与密码
  2. 到数据库中查找对应的账号和密码
  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):数据库控制语言

  • grant(授权)
  • revoke(取消授权)

使用者

  • DBO(database operater)
  • DBA(database administrator):root/password

简单的结构

DB Server(数据库服务器)
 DB(数据库)
  table(数据表)
   record()
    field
     charset

流程

  1. 链接数据库
  2. use/create:database
  3. 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. 对数据进行操作

1
$sql = "(此处就是SQL指令)";

4. 用变量对数据进行存取

1
$result = mysql_query($sql,$db);

5. 最后关闭数据库

当取到数据的时候就可以关掉了,这样可以降低数据库风险。

1
mysql_close($db); 

  • sql指令可以大小写,但各种数据库名称和数据表名称要区别大小写。