会话控制技术(session&cookie)

文章目录

    • 为什么要使用会话控制技术
    • Cookie
      • Cookie的优缺点
    • Session
      • Session的配置
      • Session的优缺点
      • Session的分布式解决方案
    • PHP操作
      • Cookie
      • Session
      • 客户端禁用Cookie时传递Session

这是一个基础知识,也是初学者经常被问道的知识点,这里做个总结。关于Cookie的图片截图来自书籍《图解HTTP》。

为什么要使用会话控制技术

HTTP是无状态协议,它不对之前的发生过的请求和响应的状态进行管理。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一方面来说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各个场景里。

Cookie

如图,如果让服务器管理全部客户端状态则会成为负担。
会话控制技术(session&cookie)_第1张图片
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后比对服务器上的记录,最后得到之前的状态信息。
第一次请求,没有Cookie
会话控制技术(session&cookie)_第2张图片
第二次以后,存有Cookie信息状态的请求。
会话控制技术(session&cookie)_第3张图片

Cookie的优缺点

优点:
(1)存储在客户端,不会占用服务器资源
缺点:
(1)用户有权限禁止Cookie

Session

Sesssion技术是将使用的相同的资料存储在服务器当中,这样用户没有办法禁用Session的使用。但Session不是完全脱离Cookie的,而是基于Cookie的。SessionID是存储在Cookie的,如果用户禁用Cookie,可以URL传递SessionID的值。Session默认保存在服务器的文件中,文件名为: sess_sessionid的值。

Session的配置

在 php.ini 中,以 session 开头的参数配置,是否开启、路径、名称等,以及 session.gc 开头的垃圾回收配置。

Session的优缺点

优点:
(1)存储在服务器,安全
缺点:
(1)占用服务器空间
(2)存在分布式问题

Session的分布式解决方案

通过 session_set_save_handler函数,将session保存在redis或者数据库中。
会话控制技术(session&cookie)_第4张图片

PHP操作

Cookie

设置cookie

setcookie (string $name,string $value,int $expire,string $path,string $dmain,bool $secure);
除了 name 其他参数都是非必须的

读取Cookie

$_COOKIE

删除Cookie,他是只读的,不能unset

setcookie($name,'',time()-1); // 让其值过期

Session

session_start(); // 开启session
$_SESSION['name'] = 'value';
$_SESSION = []; // 将所有 session的值清空
session_destroy(); // 销毁当前session的文件资料

客户端禁用Cookie时传递Session

比如:

< a href="1.php" >下一个页面 

如果用户没有禁用Cookie,服务器会找到保存在客户端的Cookie,但如果客户禁用了Cookie,服务器就找不到之前的Cookie了。可以这样使用:

< a href="1.php " >下一个页面 

SID是 session_name().’='session_id()。

你可能感兴趣的:(PHP)