B/S架构

定义

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时将不能使用。


一些特征

作用:身份认证
来源:由响应包中的set-cookie字段下发
使用:每次请求页面时,请求包带上cookie字段
存放:浏览器本地,浏览器可以禁用cookie,达到一定程度的防追踪
生存周期:开发人员决定,但可手动使其失效(例如:退出登陆)
即被他人截取到cookie后,及时退出,浏览器放出退出请求,服务器接收到请求并执行,使cookie失效,避免损失


常见使用方法

服务器在客户端保存用户的信息,如:登录名,密码等。这些数据的量并不大,服务器端在需要时可从客户端读取,保存在客户端的浏览器缓存目录下。

  1. 当浏览器访问cookie.php时,服务器还(huan)以Set-Cookie:name=zxf;expire=Wed,21-Sep-2017 20:14 GMT回送http响应,当浏览器获取到该消息后,就会保存该Cookie的信息到本地磁盘。
  2. 如果没有时间(第三个参数),Cookie不会保存到客户端,当浏览器会话结束,Cookie会消失。
  3. Cookie保存的是字符串信息
  4. 客户端可以保存多个key=>val,Cookie可以有多个key=>val,可以给不同的键值,制定不同的有效时间
  5. Cookie在保存过程中,会对中文进行urlencode编码

tip
浏览器A已登录,存有Cookie;浏览器B未登陆,但若获取A的Cookie进行身份认证,则可不用账号密码也可实现登陆


简单代码使用

1
2
3
4
5
6
7
if($_POST['name'] == 'admin' && $_POST['password'] == 'password') {
$value = "my cookie value";
setcookie("loginString", $value);
// setcookie("loginString", $value, 0, "/", "localhost", false, false);
header("Location:http://localhost/cookie/view.php");
//echo "login ok";
}

注销逻辑

1
2
setcookie("loginString", $value, time() - 60 * 60);  // 使过期
setcookie("loginString",""); // 置空

Session

存放:服务器端,防篡改。即使禁用Cookie,Session依然可以确定个人信息


表单处理

前段通过一个Form表单来提交数据。可指定提交方式为GETPOST,在后台通过$_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
2
3
4
5
6
<form enctype="multipart/form-data" method="POST">
<!-- MAX_FILE_SIZE must precede the file input filed -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file:<input type="file" name="userfile" />
</form>
1
2
3
4
5
6
7
8
9
10
<?php
echo $_FILES['userfile']['name']."<br>";
echo $_FILES['userfile']['size']."<br>";
echo $_FILES['userfile']['type']."<br>";
echo $_FILES['userfile']['tmp_name']."<br>";

var_dump($_FILES['userfile']['error']);
echo "<br>";
var_dump(move_uploaded_file($_FILES['userfile']['tmp_name'], "./", $_FILES['userfile']['name']));
?>

补充

AJAX技术

ajax技术,关键是一个异步刷新。通过ajax代码与后台发生数据交换,不必刷新URL,即可实现页面的显示变化。
在与后台交互数据时,关键点:要new一个能够网络通讯的http请求类,但是根据不同的浏览器,会有不同的new方法,这也叫做浏览器兼容适配

IE6浏览器:

1
var oAjax = new XMLHttpRequest();

IE6浏览器:

1
var oAjax = new ActiveXObject('Microsoft.XMLHTTP');

new出来的网络请求的实体类,之后,就可通过设置GETPOST方式打开URL连接的方式来发送数据并得到返回值

1
oAjax.open([OpenMethod], [url], [WaitOrNot])

第三个参数为truefalse,表示是否等待这个返回再继续执行JS代码,一般置为true,若为GET方式,直接将参数拼接到url上即可;若为POST方式,稍有不同,关键在send函数的参数不同

1
2
3
4
5
var 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()即可

伪协议

PHP官方文档
CSDN博客

您的支持是我前进的动力!