HTTP简介
HTTP协议:Hypertext transfer protocol web浏览器与web服务器之间的一问一答的交互过程必须遵循一
的规则,这个规则就是Http协议。
浏览器与服务器的交互过程,是以请求-响应的方式进行的。一次请求包含3部分:请求行,请求头,请求内
容。一次响应也包含3部分:响应行,响应头,响应内容。
Http链接是一种无状态的链接。
HTTP1.1简介
HTTP1.1的特点:
(1).在一个TCP连接上可以传送多个HTTP请求和响应。
(2).多个请求和响应过程可以重叠。
(3).增加了更多的请求头和响应头,比如:Host、If-Unmodified-Since请求头等。
而HTTP1.0协议上,一次连接只能是一次请求,一次响应。
浏览器访问多图网页
在一个HTML页面中如果包含标签的话,当解析到该标签时,还会向服务器请求访问标记中的指定文
件,即再次建立连接并发出HTTP请求。
如果HTML页面中有一个超链接:xxx,当点击到这个链接时,也会触发浏览器与web服
务器开始一次新的HTTP通信。
HTTP请求信息和响应信息
HTTP请求信息
client连接上server后,向服务器请求某个web资源,称之为client向server发送了一个HTTP请求。
一个完整的HTTP请求包括如下内容:请求行、若干请求头,其中消息头和正文都是可选的,消息头和正
文内容之间要用空行隔开。
HTTP响应信息
一个HTTP响应代表服务器向客户端回发的数据,主要包括:状态行、若干消息头、以及响应正文,其中
一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。
HTTP状态行
格式:HTTP版本号 状态码 原因叙述
举例:HTTP/1/1 200 OK
会话控制
什么是会话控制
会话控制是一种面向连接的可靠通信方式,通常根据会话控制记录判断用户的登录行为。
为什么要用会话控制
当需要在网站中跟踪Web用户以及对同一个访问者的请求需要在多个页面之间共享数据,这是我们就需
要用到会话控制了。
如何使用会话控制
我们在浏览网页时,使用的都是http协议,由于http协议是无状态的,当一个用户请求一个页面以后,再
请求同一个网站上的另一个页面时,HTTP协议不能告诉我们这两个请求是来自同一个用户,会被当做
独立的请求,而不会将这两次访问联系在一起。
使用超链接或者header()函数等重定向方式,将需要传递的信息传递过去。
客户端技术Cookie,将用户的会话信息,存放在客户端电脑之中。
服务器端技术Session,将用户的会话信息保存在服务器端。
Cookie机制
Cookie是一种客户端技术,是服务器将客户端资料保存在用户的电脑系统当中。这样能提高网页处理的效率
降低服务器的负担。
设置Cookie
setCookie(string name[,stringvalue[,int n a m e [ , s t r i n g v a l u e [ , i n t expire[,string path[,string p a t h [ , s t r i n g domain[,bool $secyre]]]]]);
setCookie()函数定义一个和其余HTTP头一起发送的Cookie,它的所有参数是对应HTTP头Cookie资料的
属性,而我们经常使用的只有前3个。
setCookie(name) <==> setCookie(name, ”),销毁某一个cookie
当2次设置相同的Cookie识别标志,后面的会将前面的覆盖。
读取Cookie
setCookie('username', 'hkf', 0);
echo $_COOKIE['username'];
setCookie('user[username]', 'hkf');
setCookie('user[pwd]', md5('123456'));
setCookie('user[gender]', 'male');
foreach(_COOKIE['user'] as key => $value)
{
echo key . ":" . value . "\n";
}
删除Cookie
第一种方式,利用setCookie()函数仅导入第一个Cookie识别名称,其他参数为空,这样当浏览器关闭时
自动删除Cookie。
第二种方式,利用setCookie()函数,把目标Cookie设定为“已过期”状态。
<?php
setCookie("Account"); //第一种方式
setCookie("isLogin", "", time()-3600); //第二种方式
?>
Session机制
Session概述
Session是一种服务器端技术,服务器将会话信息保存在服务器,使用者无法停止Session的使用。
Cookie和Session的情景再现:
Session就是这样,在客户端仅需要保存由服务器为用户创建的一个Session标志符,称为Session ID
而在服务器端保存Session变量的值。Session ID会保存在客户端的Cookie里,当用户请求服务器时
就会把Session ID发送给服务器,再通过Session ID提取保存在服务器中的Session变量。
Session是存放在服务器中的,为了避免对服务器系统造成过大的负荷,因此Session并不像Cookie是一
种半永久性的存在。Session会在以下2种情况下失效。
(1)使用者关闭浏览器,client与server失去连接之后。
(2)Session指定的有效期限到期。一般而言PHP系统中对于Session的生存时间并无定义,也就是说
预设值为0,但可以通过修改php.ini中的session.cookie.life_time配置。默认为0,即“至
到浏览器关闭”。当系统赋予Session有效期限后,不管浏览器是否关闭,Session都会自动
消失。
配置Session
php.ini中关于Session的一些配置描述如下:
Session的声明和使用
Session的设置不同于Cookie,必须先启动,以便让PHP核心程序,将和Session相关的内建环境变量预
先载入至内存中。
session_start()函数的语法格式如下所示:bool session_start(viod)
该函数有2个作用,一是开始一个会话,二是返回已经存在的会话。这个函数没有参数,返回的皆是
TRUE。如果你使用的是基于Cookie的Session,在调用session_start()函数开启时,不能有任何的输
出。因为基于Cookie的Session在开启时,会生成一个唯一的Session ID保存在客户端的电脑Cookie
中。如果Session已经开启,再次调用该函数时,会根据Session ID返回已经存在的Session。
设置Session和获取Session
<?php
session_start();
$_SESSION['username'] = 'this is test';
$_SESSION['pwd'] = md5('123456');
?>
销毁Session
<?php
session_start();
// 删除所有的Session变量,也可以使用unset($_SESSION[xxx])逐个删除
$_SESSION = array();
// 删除保存Session ID的Cookie文件
$cookie_path = ini_get('session.cookie_path');
if (isset($_COOKIE[session_name()])) {
setCookie(session_name(), time()-3600, $cookie_path);
}
// 彻底销毁Session
session_destory();
?>
注意:session_destory()可以用来结束当前会话,并清空会话中的所有资源。但该函数并不会释放和当前session相关的变量,也不会删除保存在客户端Cookie中的Session ID。