PHP会话技术
Cookie技术
- Cookie在浏览器和服务器之间的传输过程
- 客户端 HTTP请求
- 服务器 PHP调用 a.php
- 服务器 a.php
Set-Cookie:City=Beijing
- 服务器 发送至客户端
Set-Cookie:City=Beijing
- 客户端 浏览器缓存
Set-Cookie:City=Beijing
- 客户端 发送至服务器
Set-Cookie:City=Beijing
- 服务器 PHP调用 b.php
创建Cookie
setcookie()
创建Cookie
- 由于Cookie是HTTP请求消息头的一部分,因此setcookie()函数必须在其他信息被输出到浏览器前调用,否则会导致程序出错
- 一个浏览器或一个域名下最多可以存放Cookie的数量以及每个Cookie的大小都与浏览器的版本相关
<?php
setcookie('city', '南京市', time()+ 60*60*1);
setcookie('district', '泰州市', time()+ 60*60*1);
echo 'cookie创建成功!';
?>
读取Cookie
<?php
setcookie('city', '南京市', time()+ 60*60*1);
setcookie('district', '泰州市', time()+ 60*60*1);
echo 'cookie创建成功!';
echo $_COOKIE['city'];
echo $_COOKIE['district'];
?>
删除Cookie
- Cookie的销毁
- 如果Cookie没有设置他的时间,其Cookie文件会在关闭浏览器时自动被删除
- 如果希望在关闭浏览器前删除,可以用
setcookie()
函数来实现
<?php
setcookie('city', '', time()-60*60*1);
setcookie('district', '', time()-60*60*1);
echo "cookie删除成功!<br>";
echo "{$_COOKIE['city']}<br>";
echo "{$_COOKIE['district']}<br>";
?>
Cookie案例 — 显示用户上次访问时间
<?php
header("Content-Type: text/html; charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
$timeNow= date('Y年m月d日 H:i:s', time());
setcookie('lastLoginTime', $timeNow, time()+ 60*30);
if(isset($_COOKIE['lastLoginTime'])){
// echo "您上次访问的时间是:{date('Y年m月d日 H:i:s', $_COOKIE['lastLoginTime'])}";
echo "您上次访问的时间是:".$_COOKIE['lastLoginTime'];
}else{
echo "您是首次访问!";
}
?>
Session技术
- Session工作原理
- 客户端 第一次发送HTTP请求
- 服务器 PHP调用 a.php
- 服务器 a.php 生成Session的ID
PHPSESSID=111
- 服务器 a.php
Set-Cookie:PHPSESSID=111
- 服务器 发送至客户端
Set-Cookie:PHPSESSID=111
- 客户端 将session存放在浏览器缓存
- 客户端 后续访问服务器
Set-Cookie:PHPSESSID=111
- 服务器 根据Cookie中的id识别不同的用户
启动Session
session_start()
启动函数
- 在session_start()函数中已经封装了发送Cookie的操作
- 也就意味着session_start()内部已经进行了一次发送头部动作
- HTTP协议规定,HTTP请求消息头必须在HTTP请求的内容之前发送
- 在调用session_start()之前不能有任何输出,包括空行和空格,否则就会报错
<?php
session_start();
echo "当前Session的ID:".session_id();
?>
向Session添加数据
- 超全局数组
$_SESSION[]
用于保存用户特定的数据
<?php
session_start();
echo "当前Session的ID:".session_id();
$_SESSION['name']= 'Sunny';
$_SESSION['word']= '泥萌';
?>
读取Session中的数据
<?php
session_start();
echo "当前Session的ID:".session_id();
echo "<br>"
$_SESSION['name']= 'Sunny';
$_SESSION['word']= '泥萌';
$valName= $_SESSION['name'];
$valWord= $_SESSION['word'];
echo "{$valName}<br>{$valWord}";
?>
删除Session中的数据
- 服务器在收到用户退出网站请求时,需要删除该次会话中的数据
- 删除单个数据
unset($_SESSION['key']);
- 删除所有数据
$_SESSION= array();
- 结束当前会话
session_destroy()
<?php
session_start();
echo "当前Session的ID:".session_id()."<br>";
unset($_SESSION['name']);
$_SESSION= array();
session_destroy();
echo "当前Session的ID:".session_id()."<br>";
?>