• 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>";
    ?>
    
  • 相关阅读:
    nyoj_518_取球游戏_201404161738
    nyoj_528_找球号(三)_201404152050
    nyoj_68_三点顺序_201404152013
    nyoj_123_士兵杀敌(四)_201404131143
    树状数组
    nyoj_116_士兵杀敌(二)_201404131107
    hdu_1024_糖果大战_201404021640
    hdu_1205_吃糖果_201404021440
    nyoj_278_排队_201403282135
    nyoj_127_星际之门(一)_201403282033
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14002383.html
Copyright © 2020-2023  润新知