[PHP从小白到大牛]-023 PHP-会话控制 cookie/session

418 阅读2分钟
  • 什么是会话

    • 会话就是具有逻辑关联的多个简单交互的集合

    为什么需要会话

    • http是无状态协议
    • 每个请求都是单独处理的
    • 这也就意味着, 服务器对于两次请求, 不知道是一个用户请求两次, 还是两个用户, 请求一次...

    • 解决无状态的思路就是给请求添加独立的标记
    • 比如超市无法记录每个顾客的购物历史, 所以发明了会员卡

    会话控制

    • 控制会话的开始和结束
    • 识别并处理会话内的请求
    • 更新会话的状态

    会话控制的几种方式

    • cookie
    • session

    cookie

    • 保存在客户端(浏览器)
    • 用于存储用户的关键信息
    • 通过http请求头和响应头来传输

    session

    • 保存在服务端
    • 用于存储用户的相关信息
    • 通过保存在cookie里的sessionid来定位session内容

    cookie能做什么?

    • 标记用户
    • 标记客户端
    • 存储简单信息

    cookie的工作原理

    • 用户请求服务器
    • 服务器在HTTP响应中设置cookie
    • 在cookie的有效期内, 用户的每次请求都会携带cookie的值
    • 服务器识别并处理cookie的内容
    • 在携带cookie时, 只可以访问域名相同, 路径匹配并且在有效期内的cookie
    • 通过cookie指令发送具有访问权限的cookie的值
    • 多个值用分号隔开

    cookie什么时候会失效

    • cookie过期
    • 手动删除cookie, chrome 的快捷键 ctrl + shift + delete
    • 删除单条, 需要找到内容设置, cookie, 查看cookie和所有访问数据, 手动删除
    • 使用服务器清除cookie的有效性, 设置过期时间为一个过去的时刻, 这样的话, cookie 则不可访问

    cookie的使用

    设置/修改cookie 的值 setcookie()

    • 返回值是boolean, 如果成功设置返回true, 失败返回false
    • 第一个参数, cookie的名称
    • 第二个参数, cookie的值
    • 第三个参数, 过期时间, 是一个时间戳
    $result = setcookie('username', 'admin', time()+3600);
    if($result){
        echo "设置成功!";
    }else{
        echo "设置失败!!!";
    }
    
  • cookie和session的区别(异同点):

    • 相同点:
      • 都可以用来标记用户, 客户端, 可以存储数据
      • http协议的一个补充, 可以实现会话控制
    • 不同点:
      • 存储方式不同:
        • cookie是保存在客户端的(浏览器)
        • session是保存在服务器上的
        • sessionid是存在cookie里的
      • 存储内容不同:
        • cookie可以存储简单数据, 比如字符串
        • session可以存储复杂的数据, 比如数组, 对象
      • 工作方式不一样
        • cookie利用http协议直接传输会话数据
        • session利用sessionid来定位会话

session

// 创建一个 session
session_start();
$_SESSION['sessionName'] = 'sessionValue';
echo "session_id:".session_id(); // 显示当前的session_id
echo "<br>";

// 读取 session 的值
echo $_SESSION['sessionName'];

//销毁一个session
unset($_SESSION['sessionName']);
echo "<br>";
var_dump($_SESSION);

实战, 实现用户的登录注册