定义
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器。如Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。
Cookie与Session
介绍
在很多时候,需要跟踪浏览器在整个网站的活动,对其身份进行自动或半自动的识别(即网站登录之类的功能)。此时,常采用Cookie和Session来追踪和判断
区别
Session信息是存放在Server端,但Session id是存放在Client Cookie的,当然php的Session存放方法是多样化的,这样即使禁用Cookie依旧可以跟踪
Cookie则完全保持在客户端的。如:IE、Firefox、Chrome。当客户端禁止Cookie时将不能使用。
Cookie
一些特征
作用:身份认证
来源:由响应包中的set-cookie字段下发
使用:每次请求页面时,请求包带上cookie字段
存放:浏览器本地,浏览器可以禁用cookie,达到一定程度的防追踪
生存周期:开发人员决定,但可手动使其失效(例如:退出登陆)
即被他人截取到cookie后,及时退出,浏览器放出退出请求,服务器接收到请求并执行,使cookie失效,避免损失
常见使用方法
服务器在客户端保存用户的信息,如:登录名,密码等。这些数据的量并不大,服务器端在需要时可从客户端读取,保存在客户端的浏览器缓存目录下。
- 当浏览器访问
cookie.php
时,服务器还(huan)以Set-Cookie:name=zxf;expire=Wed,21-Sep-2017 20:14 GMT
回送http响应,当浏览器获取到该消息后,就会保存该Cookie的信息到本地磁盘。 - 如果没有时间(第三个参数),Cookie不会保存到客户端,当浏览器会话结束,Cookie会消失。
- Cookie保存的是字符串信息
- 客户端可以保存多个key=>val,Cookie可以有多个key=>val,可以给不同的键值,制定不同的有效时间
- Cookie在保存过程中,会对中文进行urlencode编码
tip
浏览器A已登录,存有Cookie;浏览器B未登陆,但若获取A的Cookie进行身份认证,则可不用账号密码也可实现登陆
简单代码使用
1 |
|
注销逻辑
1 |
|
Session
存放:服务器端,防篡改。即使禁用Cookie,Session依然可以确定个人信息
表单处理
前段通过一个Form
表单来提交数据。可指定提交方式为GET
或POST
,在后台通过$_GET
或者$_POST
超全局数组来接收。
前端HTML页面
简单实现1
2
3
4
5
6
7
8
9
10
11
12
13
14<html>
<head>
<title>
login
</title>
</head>
<body>
<form action = "login.php", method = "post">
<input type = "text" name = "name" />
<input type = "text" name = "password" />
<input type = "submit" name = "submit" />
</form>
</body>
</html>
后端PHP页面
简单实现1
2
3
4
5<?php
if($_POST['name'] == 'admin' and $_POST['password'] == 'password') {
echo "login ok";
}
?>
文件上传代码实现
1 |
|
1 |
|
补充
AJAX技术
ajax技术,关键是一个异步刷新。通过ajax代码与后台发生数据交换,不必刷新URL,即可实现页面的显示变化。
在与后台交互数据时,关键点:要new
一个能够网络通讯的http
请求类,但是根据不同的浏览器,会有不同的new
方法,这也叫做浏览器兼容适配
非IE6
浏览器:1
var oAjax = new XMLHttpRequest();
IE6
浏览器:1
var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
new
出来的网络请求的实体类,之后,就可通过设置GET
或POST
方式打开URL
连接的方式来发送数据并得到返回值
1 |
|
第三个参数为true
或false
,表示是否等待这个返回再继续执行JS
代码,一般置为true
,若为GET
方式,直接将参数拼接到url
上即可;若为POST
方式,稍有不同,关键在send
函数的参数不同1
2
3
4
5var url = "ajax.php";
var postStr = "hehe" + sValue;
oAjax.open('post', url, true);
oAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//oAjax.send(postStr); // 若为GET方式,直接使用send()即可