PHP基础之会话技术

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

  • 使用超全局数组$_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的IDPHPSESSID=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中的数据

  • $val= $_SESSION['key']
<?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>";
?>
原文地址:https://www.cnblogs.com/SharkJiao/p/14002383.html