当前位置: 首页 > news >正文

PHP(14)会话技术

PHP(14)会话技术

  • 一、概念
  • 二、分类
  • 三、cookie技术
    • 1. cookie的基本使用
    • 2. cookie的生命周期
    • 3. cookie的作用范围
    • 4. cookie的跨子域
    • 5. cookie的数组数据
  • 四、session
    • 1. session原理
    • 2. session基本使用
    • 3. session配置
    • 4. 销毁session

一、概念

HTTP协议是一种无状态、无连接的协议,无法判断多个请求是否来自同一个用户。会话技术就是让HTTP协议识别来自同一个用户的多个请求。

二、分类

  1. cookie:是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。本质是由Web服务器保存在客户端上的小文本文件,可以包含有关用户的信息。
  2. session:session技术是将数据保存在服务器端,session技术的实现依赖于cookie技术。
  3. 区别
区别cookiesession
安全性存储在浏览器端,安全性低存储在服务器,安全性高
数据大小数量和大小都有限制(4KB)数据存储不限
可用数据类型只能存储简单数据,数值、字符串可以存储复杂数据

三、cookie技术

setcookie(名字, 值, 生命周期, 作用范围, 域名);

1. cookie的基本使用

  • 设置cookie信息:setcookie(名字, 值)
    • 名字必须是字符串。
    • 值必须是简单类中的整数或字符串。
    setcookie('age', 1);
    
  • 读取cookie信息:$_COOKIE
    var_dump($_COOKIE);
    

在这里插入图片描述

2. cookie的生命周期

  • 默认关闭浏览器则生命周期结束。
  • 通过setcookie可以限定生命周期(必须加 time()):setcookie("a1", 'a1', time() + 7 * 24 * 60 * 60);
  • 手动结束生命周期:setcookie('age', '');setcookie("a1", 'a1', time());

3. cookie的作用范围

  • 默认范围:上层文件夹中设定的cookie可以在下层中访问,而下层的cookie不能在上层访问。
  • 把cookie的作用范围设置为网站根目录:setcookie('a1', 'a1', 0, '/');

4. cookie的跨子域

  • 默认不允许跨域访问cookie。
  • 设置cookie跨子域:setcookie('a1', 'a1', 0, '/', 'mysite.com');

5. cookie的数组数据

  • cookie只能设置成简单数据类型。
  • 把cookie伪装成数组:
setcookie('goods_id[0]', 1);
setcookie('goods_id[1]', 2);
setcookie('goods_id[2]', 3);
setcookie('goods_id[3]', 4);
  • 获取cookie数组:$_COOKIE['goods_id'][2]

四、session

1. session原理

  • session与浏览器无关,但与cookie有关。
    1. PHP碰到session_start()时开启session会话,会自动检测sessionID
      • 如果cookie中存在,则使用现成的。
      • 如果cookie中不存在,会创建一个sessionID,并通过响应头以cookie形式保存到浏览器中。
    2. 初始化超全局变量$_SESSION为一个空数组
    3. PHP通过sessionID去指定存放session文件的位置匹配对应的文件
      • 不存在该文件,则创建一个sessionID命名文件
      • 存在该文件,读取文件内容,将数据存储到$_SESSION中
    4. 脚本执行结束,将$_SESSION中保存的所有数据序列化存储到sessionID对应的文件中。

2. session基本使用

  • $_SESSION是通过session_start()函数的调用才会定义的,不会直接定义。
  • 设置session和读取session
<?php
// 开启session
session_start();
// 设置session
$_SESSION['name'] = 'Mark';
$_SESSION['hobby']=array('sing', 'dump');
// 读取session
var_dump($_SESSION);

在这里插入图片描述

  • 删除一个session unset($_SESSION['name']);
  • 删除所有session $_SESSION = array();

3. session配置

  • 配置方式
    1. 在php.ini中配置,全局生效
    2. 脚本中配置,PHP可以通过ini_set()函数来设置项目配置
  • 基础配置
    1. session.name:session名字,保存到cookie中sessionID对应的名字
    2. session.auto_start:自动开启session,默认关闭
    3. session.save_handler:session数据的保存方式,默认是文件形式
    4. session.save_path:session文件默认存储位置
  • 常用配置
    1. session.cookie_lifetime:PHPsessionID在浏览器端对应cookie的生命周期,默认是会话结束
    2. session.cookie_path:sessionID在浏览器存储之后允许服务器访问的路径(cookie作用范围)
    3. session.cookie_domain:cookie允许访问的子域
  • 垃圾回收配置
    1. session.gc_maxlifetime:规定session文件的最大生命周期,默认24分钟。
    2. session.gc_probability:垃圾回收概率因子,默认为1
    3. session.gc_divisor:垃圾回收概率分母,默认为1000
      • 触发几率默认是 1/1000

4. 销毁session

  • $_SESSION = array(); 只会删除数据。销毁session会删除session对应的文件。
  • 通过session_destroy()函数来销毁session。
http://www.lryc.cn/news/9376.html

相关文章:

  • 对JAVA 中“指针“理解
  • 功率放大器在MEMS微结构模态测试研究中的应用
  • 【算法基础】字典树(Trie树)
  • MyBatis 插件 + 注解轻松实现数据脱敏
  • MySQL优化篇-MySQL压力测试
  • CF43A Football 题解
  • Nginx常用命令及具体应用(Linux系统)
  • 从零实现Web服务器(三):日志优化,压力测试,实战接收HTTP请求,实战响应HTTP请求
  • MFC入门
  • 1、H5+CSS面试题
  • 亚马逊云科技重磅发布《亚马逊云科技汽车行业解决方案》
  • Springboot扩展点之FactoryBean
  • 新库上线 | CnOpenDataA股上市公司交易所监管措施数据
  • 同步辐射XAFS表征方法的应用场景分析
  • 06 antdesign react Anchor 不同页面之间实现锚点
  • mysql调优-内存缓冲池
  • 【LeetCode】每日一题(5)
  • 输入任意多个整数, 把这些数据保存到文件data.txt中.(按ctrl + z)
  • Mysql数据库的时间(3)一如何用函数插入时间
  • 关于eval函数(将JSON格式的字符串转换成JSON格式对象)
  • 2023最强软件测试面试题,精选100 道,内附答案版,冲刺金3银4
  • 一文搞懂Docker容器里进程的 pid 是如何申请出来的?
  • 若依框架如何新增自定义主题风格
  • C语言格式化输入和输出; Format格式化
  • Revit教程:怎么关掉工具栏的实时提示?
  • javascript 简介
  • 医学图象分割常用损失函数(附Pytorch和Keras代码)
  • 【新2023】华为OD机试 - 病菌感染(Python)
  • QGIS中进行批量坡向计算
  • Redis持久化机制