1 概述
会话技术指的是当一个浏览器与服务器在进行对话的期间(浏览器没有关闭),各个请求不同的脚本间可以共享一些数据,这种技术就称之为会话技术。
常用的会话技术有两种:
1.Cookie技术:将数据保存在浏览器上,可以在不同的PHP脚本之间共享浏览器上的数据
2.Session技术:将数据保存在服务器端,可以在不同的PHP脚本之间共享服务器端的Session数据
2 Cookie技术
Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上;在浏览器发起请求时,通过HTTP请求的头部,将这些片段信息传回到服务器。
2.1 服务端向客户端添加Cookie
PHP中,设置Cookie的函数是:
function setcookie ($name, $value = "", $expire = 0, $path = "", $domain = "", $secure = false, $httponly = false)
setcookie('isLogin', '1', time() + 3600);
设置数组
setcookie('user[username]', 'Lucy');
setcookie('user[password]', '123456');
2.2 服务端读取Cookie
$_COOKIE['username']
2.3 服务端删除客户端Cookie
$expirtTime = time() - 3600;
setcookie('username', '', $expirtTime);
3 Session技术
Cookie技术是在用户客户端的计算机保存资料,所以会引起巨大的争议,用户有权阻止Cookie的使用,使得服务器无法通过Cookie来跟踪用户。
Session技术是将用户的相关数据放在服务器,服务器会为用户创建一个Session ID,它是一个32位十六进制的字符串。
使用Session跟踪一个用户,是通过在各个页面中间传递Session ID,并通过Session ID在服务器获得对应的数据。常见的Session ID传送方法有两种:
1.基于Cookie的方式传递Session ID
2.通过URL参数进行传递
3.1 Session的声明和使用
使用Session技术,必须先调用session_start()
函数,将相关的环境变量预先加载。这个函数有两个主要作用:
1.开始一个会话
2.返回已经存在的会话
bool session_start ([ array $options = [] ] ) //PHP 7.0,The options parameter was added.
3.1 Session的写和读
在调用session_start()
函数之后,就可以操作$_SESSION
全局数组。
$_SESSION['username'] = 'admin';
$username = $_SESSION['username'];
3.2 Session注销
Session注销分成4个步骤:
1.开启Session
2.删除所有的Session变量
3.删除储存在客户端的Session ID
4.删除储存在服务端的Session文件
可以使用unset()
函数来释放单个 变量,也可以赋值一个空数组,删除所有的变量
unset($_SESSION['username']);
$_SESSION = array();
如果Session是基于Cookie的,也需要清除Cookie中保存Session ID。
if (isset($_COOKIE[session_name()])) {
//路径一定要和php.init设置的一致
setcookie(session_name(),'', time() - 3600,'/');
}
删除Session文件
session_destroy();
最终Session的注销方法:
function clearSession() {
session_start();
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
//路径一定要和php.init设置的一致
setcookie(session_name(),'', time() - 3600,'/');
}
session_destroy();
}
参考文章
前端必备HTTP技能之cookie技术详解:https://www.jianshu.com/p/2ceeaef92f20