http无状态特点以及session与cookie详解

会话技术

  • http无状态概述
  • 状态保持方式概述

cookie原理分析

  • 一个cookie的设置以及发送过程分为以下四步
    1. 客户端发送一个http请求到服务器端
    2. 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
    3. 客户端发送一个http请求到服务器端,其中包含Cookie头部
    4. 服务器端发送一个http响应到客户端

语法:

setcookie(name[, value, expire, path, domain]);

cookie常用属性

  • expires 有效期

    • 临时COOKIE(缓存cookie)
    setcookie("uName","admin");
    • 硬盘COOKIE
    //一小时过期
    setcookie("uName","admin",time()+ 3600)
    //永久性COOKIE
    setcookie("password","123",PHP_INT_MAX);
  • path有效 路径

    //只有在upload文件夹下才能被访问到
    setcookie("uName","admin",time()+ 3600,"/upload")
  • domain 域名

    • 域名:
    • 顶级:baidu.com
    • 二级域名
      • www.baidu.com
      • music.baidu.com
      • api.music.baidu.com
      • image.baidu.com
    //只有在a.com以及它下面的子域名中才能被访问
    setcookie("uName","admin",time()+ 3600,"/","a.com")

删除cookie

  • 设置有效时间为过去时间

    setcookie("uName","admin",time()-1);
  • 将cookie中的值设置为false或者空字符串

    setcookie("uName",false);
    //或者
    setcookie("uName","");
  • 不设置值

    setcookie("uName");
  • 在浏览器中清除缓存

服务器操作cookie

// 设置cookie
// 
// 设置1小时后过期
setcookie("user", "lisi", time()+3600);
// 获取单个cookie
echo $_COOKIE["user"];
// 查看所有cookie
print_r($_COOKIE);

js对cookie基本操作

// 设置cookie
function setCookie(key,value,param){
    document.cookie = key + '=' + value + '; expires=' + param.expires + '; path=' + param.path; 
}
// 获取cookie
function getCookie(key){
    var cookies = document.cookie;
    var arr = cookies.split('; ');
    if(arr){
        for (var i = 0; i < arr.length; i++) {
            var kv = arr[i].split('=');
            if(kv[0] == key){
                return kv[1];
            }
        }
    }
}

cookie的缺点:

  • COOKIE数据不太安全;
  • COOKIE存储的数据类型,只能是字符串;
  • COOKIE文件是有容量限制(大约4KB)。4*1024b–> 1个文字大概是2~3b

session

session的优点:

  • SESSION也是一种会话技术;
  • SESSION数据存在服务器端,相对于比较安全;
  • SESSION技术是基于COOKIE的,没有COOKIE也就没有SESSION了。
  • 服务器将SESSION数据保存在服务器上,而将SESSION的用户id存储在客户端电脑上。
  • SESSION存储的数据类型,除了资源外的数据类型都可以;
  • SESSION文件没有大小限制;

session原理分析

  • 客户端第一次请求服务器时,服务器开启一个session,生成一个唯一标识(sessionid:存储的数据与此sessionid关联),并以响应头的Set-Cookie属性响应到客户端
  • 客户端的后续请求会一直通过请求头的Cookie属性携带sessionid(客户端与服务器通过此id维持状态)

session基本操作

  • 设置session
session_start();
$_SESSION['user'] = array('username'=>'lisi','age'=>'12');
  • 读取session
session_start();
$user = $_SESSION['user'];
  • 删除一个session信息
session_start();
unset($_SESSION['user']);
  • 删除所有session信息
session_start();
unset($_SESSION);
  • 销毁session
session_destroy();

session与cookie的关系

  • session可以借助cookie实现状态维持,也可以不依赖cookie(URL重写)
区别 cookie session
存储位置 浏览器 服务器
浏览器携带的数据量 少(只携带session-id)
存储的数据类型 只能是字符串 任意类型
安全性 较低 较高
默认的有效路径 当前路径及其子路径 整站有效
数据的传输量 有限制4K,不能超过20个 无限制

session的回收时间:

  • session.gc_maxlifetime
session.gc_maxlifetime = 1440

你可能感兴趣的:(PHP)