美文网首页
PHP中会话控制

PHP中会话控制

作者: donglingjiu | 来源:发表于2018-07-04 15:49 被阅读0次

    PHP中会话控制

    一、HTTP协议简介以及原理

    i. HTTP:超文本传输协议(无连接 无状态)

    1. 无连接:客户端向服务器发送请求 建立连接 服务器返回响应 连接关闭 再次请求 重新建立连接 节省资源
    image.png
    1. 无状态:每次请求独立 服务器不知道你是你

    二、Cookie

    i. 简介:为了达成 浏览器与服务器之间持久连接的状态 解决HTTP无状态的问题 让服务器知道用户是谁

    ii. Cookie存储在客户端 按照存储位置分为两种:

    1. 内存Cookie

    a) 由浏览器维护 存储在内存中 浏览器关闭之后就消失了 存在时间短暂

    1. 硬盘Cookie

    a) 存储在硬盘里面 除非设置过期时间或者手动清理 否则长期存在

    1. 使用场景:

    a) Cookie一般在服务器端设置 通过HTTP响应头(setCookie) 返回Cookie信息 浏览器得到响应 获取Cookie值 存储在文件中

    如: 购物的时候 商品信息可以记录在Cookie里面 再次请求服务器的时候 将这些信息发送给服务器 服务器追加商品信息 所以在购物车里就能得到用户的购买记录 商品信息了

    b) 网站登陆的时候 选择记住用户名|密码 ---永久登陆...

    原理就是 服务器给客户端返回一个(令牌|凭证)信息存储在Cookie文件中 再次登陆的时候 请求头包含Cookie信息 服务器通过校验 判断是否合法

    image.png

    iii. 操作Cookie

    1. 设置Cookie

    a) setcookie()

    image.png image.png image.png

    7天 时间戳可以用字符串转时间戳函数 strtotime(“ +7 days”) ;

    校验的的时候 key auth 值XXXX 为了安全 会经过一些算法生成一段字符串...

    image.png image.png

    domain 域 场景:京东 淘宝这样的大型商城 有二级域名三级域名(www.jd.com|search.jd.com...) 配置domain 使得Cookie在二级三级域名下也有效

    $secure:配制成true的话 只在加证书的HTTPS下传输Cookie

    $httponly:用js document.cookie可以操作Cookie

    b) setrawcookie()

    i. 与上面的区别 不会对值进行urlencode编码 其他参数 用法类似

    1. 读取Cookie

    a) var_dump(_COOKIE)| var_dump(_COOKIE[‘name’]) ;

    1. 更新Cookie

    a) 保证域|路径一致的情怀况下 覆盖赋值

    b) setcookie(‘key’,’value’,’有效期’,’路径’,’域’...)

    1. 删除Cookie

    a) 思路 手动删除

    b) 将Cookie有效期设置成当前时间之前 失效

    i. 如 时间戳设置成time()-1

    image.png

    iv. 通过header函数设置Cookie

    1. cookie的设置 是通过http头信息
    image.png image.png

    Cookie更新删除 同上

    v. Cookie保存数组形式的数据

    image.png

    vi. 通过JS操作Cookie

    image.png

    |

    <script>

    var Cookie = {

    //设置cookie

    set:function(key,val,expiresDays) {

    //判断是否设置 有效时间

    if(expiresDays) {

    var date = new Date() ;

    // 格式化时间 毫秒

    date.setTime(date.getTime() + expiresDays243600*1000) ;

    var expiresStr = "expires=" + date.toGMTString() + ';' ;

    }else {

    var expiresStr = '' ;

    }

    //值 编码

    document.cookie = key+'='+escape(val)+';'+expireStr ;

    },

    //根据key值 取cookie key-val; key=val;

    get:function(key) {

    //空格

    var getCookie = document.cookie.replace(/[]/g,'') ;

    //根据;拆分 成数组

    var resArr = getCookie.split(';') ;

    var res ;

    for(var i=0 , len=resArr.length; i<len; i++) {

    var arr = resArr[i].split('=') ;

    if(arr[0] == key) {

    res = arr[1] ;

    break ;

    }

    }

    //解码

    return unescape(res) ;

    }

    } ;

    </script>

    |

    vii. Cookie实战之自动登录效果

    1. 如: (一周|月|年...) 过期时间设置的不同
    image.png
    1. 校验
    image.png
    1. 思路: 拼令牌的时候 将用户名 密码加密:id 校验的时候拆分出id取数据库查询对应的用户名 密码 与令牌中的比对 ...

    2. Cookie的缺点:

    a) Cookie中不要存储敏感数据 Cookie不是很安全 截取Cookie之后可以用来Cookie欺骗

    b) 不要把Cookie当做客户端存储容器来使用 首先每个域名下允许Cookie是有限制的 根据不同的浏览器 限制不同;Cookie中保存数据最大字节数是4K

    c) Cookie设置之后 每次都会附着在http请求头中浪费带宽

    1. 替代产品 HTML5中的localStorage

    a) Cookie|localStorage|sessionStorage异同

    image.png

    b) localStorage 支持情况 控制台测试

    image.png

    c) 常用API

    image.png

    d) 存储json(序列化成字符串之后再存储)

    image.png

    e) 存储json(序列化成字符串之后再存储)

    f) localStorage常用方法封装

    image.png

    三、session简介及工作原理

    i. 什么是session会话:

    1. 服务器和浏览器建立连接之后 服务器知道客户端是谁的这段时间

    ii. session工作原理

    1. 准备建立会话的时候 PHP会先查看请求中 是否包含session_id 若是没有 服务器会在自己的内存里面创建一个新的变量 这个变量就是session_id

    2. 服务器会把这个session_id发送到浏览器保存 一般浏览器会把这个id保存在cookie中

    3. 之后 浏览器向服务器发送请求的时候 会携带cookie中存储的这个session_id 服务器会在内存查看是否有这个session_id 如此 服务器就认识这个客户端了

    4. 服务器端这个session_id变量可以存放任意的会话数据(购物商品,历史记录) 这些数据是经过序列化之后存放进去的

    5. 每次浏览器访问服务器 都可以凭借自己的session_id 到服务器的这个变量中认领自己的信息

    6. 如果想销毁会话 可以删除掉会话中的数据 也可以销毁会话文件

    image.png

    iii. PHP中使用会话

    1. 开启会话 session_start() //这句话之前不能有任何输出

    2. 设置|读取session值 $_SESSION

    3. 销毁session session_destroy()

    4. session默认以文件存储 在php.ini中配置

    image.png image.png image.png image.png
    1. 再次发送请求的时候 请求头中会携带session_id
    image.png image.png image.png image.png
    1. 设置session有效期
    image.png
    1. Session存储二维数组
    image.png
    1. 客户端禁用cookie之后 session_id 通过url方式 (会有安全隐患)
    image.png image.png
    1. 销毁会话
    image.png image.png

    相关文章

      网友评论

          本文标题:PHP中会话控制

          本文链接:https://www.haomeiwen.com/subject/fmgeuftx.html