HTTP无状态
“无状态”是指HTTP协议对于事务的处理没有记忆能力。也就是说协议本身不会在处理事务的过程中针对【之前】的信息进行存储,如果在处理当前步骤的时候需要【之前】的信息,则必需重传。
HTTP 很重要的一个特点就是无状态(每一次见面都是“初次见面”),如果单纯的希望通过我们的服务端程序去记住每一个访问者是不可能的,正是因为这一特性,所以必须借助一些手段或者说技巧让服务端记住客户端, Cookie就可以实现这种操作。
Cookie
Cookie 就像是在超级市场买东西拿到的小票,由超市(Server)发给消费者(Browser),超市方面不用记住每一个消费者的脸,但是他们认识消费者手里的小票(Cookie),可以通过小票知道消费者之前的一些消费信息(在服务端产生的数据)。
Cookie原理分析:
一个Cookie设置及发送过程可分为四部。
-
客户端发送一个http请求到服务器端
-
服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
-
客户端发送一个http请求到服务器端,其中包含Cookie头部
-
服务器端发送一个http响应到客户端
语法:setcookie(name[, value, expire, path, domain]);
Cookie常用属性:
expires有效期
//一小时过期
setcookie("uName","admin",time()+ 3600)
//永久性COOKIE
setcookie("password","123",PHP_INT_MAX);
path 有效路径
//只有在upload文件夹下才能被访问到
setcookie("uName","admin",time()+ 3600,"/upload")
// 通过path设置访问权限:目录的设置是参照网站根目录的
// 1.设置目录为父级目录,子目录也能访问
// 2.设置目录为子级目录,父级目录不能访问
// /代表整站都能访问
setcookie("username","jack",PHP_INT_MAX,"/");
删除Cookie
1.设置有效时间为过去时间
setcookie("uName","admin",time()-1);
2.将cookie中的值设置为false或者空字符串
setcookie("uName",false);
//或者
setcookie("uName","");
3.不设置值
setcookie("uName");
4.在浏览器中清除缓存
Cookie的缺点:
1.Cookie数据不太安全;
2.Cookie存储的数据类型,只能是字符串;
3.Cookie文件是有容量限制(大约4KB)。4*1024b--> 1个文字大概是2~3b
Session
由于 Cookie 是服务端下发给客户端由客户端本地保存的。换而言之客户端可以在本地对其随意操作,包括删除和修改。如果客户端随意伪造一个 Cookie 的话,对于服务端是无法辨别的,就会造成服务端被蒙蔽,构成安全隐患。于是乎就有了另外一种基于 Cookie 基础之上的手段:Session
session简介
Session 区别于 Cookie 一个很大的地方就是:Session 数据存在了服务端,而 Cookie 存在了客户端本地,存在服务端最大的优势就是,不是用户想怎么改就怎么改了。
Session 这种机制会更加适合于存放一些属于用户而又不能让用户修改的数据,因为客户端不再保存具体的数据,只是保存一把“钥匙”,伪造一把可以用的钥匙,可能性是极低的,所以不需要在意。
Session的优点:
1.Session也是一种会话技术;
2.Session数据存在服务器端,相对于比较安全;
3.服务器将Session数据保存在服务器上,而将Session的用户id存储在客户端电脑上。
4.Session存储的数据类型,除了资源外的数据类型都可以;
5.Session文件没有大小限制;
Session原理分析
客户端第一次请求服务器时,服务器开启一个session,生成一个唯一标识(sessionid:存储的数据与此sessionid关联),并以响应头的Set-Cookie属性响应到客户端
客户端的后续请求会一直通过请求头的Cookie属性携带sessionid(客户端与服务器通过此id维持状态)
Session基本操作
注意:PHP默认不会开启Session功能,如果要使用需要手动添加代码开启
设置session
session_start(); //每次操作前都要添加
$_SESSION['user']=arr('username'=>'lisi','age'=>'12');
读取session
session_start();
$user = $_SESSION['user'];
删除一个session信息
session_start();
unset($_SESSION['user']);
删除所有session信息
session_start();
unset($_SESSION);
$_SESSION = []
销毁session
session_destroy();
session与cookie的关系
sessionk可以借助cookie来实现,也可不必依赖cookie,可以借助下面一张表来更清楚的认识session与cookie;