PHP之cookie和session

cookie和session技术
登录凭证校验分析


  判断是否具有登录凭证?
    如果管理员账户密码合法,分配浏览器一个登录凭证,在向后台首页请求时,携带凭证到服务器,服务器php程序判断是否登录凭证。
  凭证是如何实现的?
    就是特定的数据,存在就是有凭证,否则就是没有凭证。

  凭证如何储存?
    如果储存到变量中:不行,变量声明周期结束,会被自动释放。
    如果储存到常量中:不行,常量生命周期结束,会被自动释放。
    如果储存到数据库中:不行,存储在数据库中,脚本周期结束了,不会消失,但是浏览器不能区分是那个浏览器登录的,不能区分该凭证是属于那个一个浏览器。

COOKIE SESSION 被称作会话技术。
    会话技术:在同一台浏览器对某台服务器进行多次请求周期内,用来持久性存储数据的技术被称为会话技术。

    1.区分浏览器。 2.多次请求数据不会丢失。

为什么会有会话技术?
   B/S架构,基于HTTP协议,特点是无状态,指的是不能储存任意一次的数据请求。

COOKIE技术
  就是将会话数据,储存在浏览器端的一种技术。
特点:
  1.服务器负责储存数据到浏览器端。
  2.浏览器在每次请求时,将记录下来的数据,携带到服务器端。
图示:

使用:
  设置cookie数据
  setcookie(key, value)
  setcookie('name','admin');
  设置指令时,是服务器向浏览器响应时候,把携带的数据发送到浏览器端。

图示:
获取cookie数据
  $_COOKIE超全局数组变量。在服务器接收到浏览器请求时,php程序,会接收到所有的cookie数据,整理到$_COOKIE数组中。

1属性
1.有效期
  默认:浏览器关闭时,cookie失效。该有效期cookie被称为临时cookie,也就会话cookie。

  通过setcookie(key, value, 有效期=0)的第三个参数完成设置,达到控制失效时间点。
有效的表示方式为时间戳:time()可以获取当前时间戳。
一旦设置有效期,只要设置的时间过期,就会立即失效cookie,与浏览器关闭无关。该cookie就称为持久cookie。

  如何判断cookie是否失效?(浏览器 or 服务器)
在设置cookie时,告知浏览器,该cookie的有效期。浏览器发出请求时候,判断cookie是否失效。也同时发生设置cookie时的相应时间。

有效期设置:time()+N

  time()-1 :删除cookie的通用做法。可以设置一个值 ,表示永久不过期。PHP_INT_MAX: 表示永久不过气。

购物车网站买东西 购物车典型实现:
  将商品放入到购物车:
    未登录:同一台浏览器可以记录购买物品,基于浏览器。
    已登录:同一个用户,记录购买物品。基于数据库用户。


2.有效路径
  url路径:cookie仅仅在当前路径,和后代路径有效。

3.有效域名:
  默认的cookie仅仅在当前域名下有效。
  可以通过使用第五个参数的形式,进行所在一级域名设置。


4.secure,是否安全连接发送到服务器
  http:
    https:加密之后的http
    如果将cookie设置了该属性,那么在浏览器向服务器发送请求,如果发送了非https请求,则不发送该cookie。


5.HTTPonly 是否仅仅在http请求时所使用

  储存在浏览器端的cookie,可以当作浏览器脚本js,所获取到。Document.cookie.


tips:cookie数据仅仅支持字符串类型。cookie的key,支持数组的写法。


Session技术
  不同于cookie技术,将会话数据储存在服务器端。
  如何区分会话数据属于那台浏览器?
    1.将不同会话的session数据分别储存,存在session数据区。
    2.为每一个数据区,设置一个唯一的标示。
    3.将唯一标示,分配到浏览器端,浏览器请求携带凭证。

图示:

session技术,基于cookie技术。session的标示session_id储存在浏览器cookie中。

  对比cookie:
    会话数据本身,安全性较高。
    请求时携带的数据量,较少。

  开启session,php核心session功能生成唯一标示,分配给浏览器,储存在数据区。
语法:
  session_start();


管理session数据
  $_SESSION完成所有的功能。


增删改查
  $_SESSION['name'] = 'admin';
  $_SESSION['pwd'] = '123';
//删除
  unset($_SESSION['name']);
  $_SESSION['pwd'] = 'abc';
//查询
  $var_dump($_SESSION['name']);

tips:清空session操作,删除所有的session数据:$_SESSION=array();

有效期:
session在浏览器关闭时失效。

原文地址:https://www.cnblogs.com/sharecorner/p/6142133.html