cookie和session

cookie生成:

  1. 首先,我们假设当前域名下还是没有 Cookie 的
  2. 接下来,浏览器发送了一个请求给服务器(这时候的Request Headers 并没有 Cookie 这个字段)
  3. 服务器设置 Cookie 并发送给浏览器(当然也可以不设置,设置了的Response Headers 就有了 Set-Cookie: name=wyc; Path=/ 这个字段)
  4. 浏览器将 Cookie 保存下来
  5. 接下来,以后的每一次请求,都会带上这些 Cookie,发送给服务器(Cookie: name=wyc)
  6. 一个 Set-Cookie 字段只能设置一个 Cookie,当你要想设置多个 Cookie,需要添加同样多的 Set-Cookie 字段,每个字段后面可以跟上过期时间等属性

cookie格式:
1.Cookie 就是浏览器储存在用户电脑上的一小段文本文件
2.Cookie 是纯文本格式,不包含任何可执行的代码
3.Cookie 由键值对构成,由分号和空格隔开
4.Cookie 虽然是存储在浏览器,但是通常由服务器端进行设置
5.Cookie 的大小限制在 4kb 左右

cookie属性:
1.expires:Cookie 失效日期(毫秒)
2.max-age:expires 是 http/1.0 协议中的选项,在新的 http/1.1 协议中 expires 已经由 max-age 选项代替,expires 的值是一个时间点 (Cookie 失效时刻 = expires),而 max-age 的值是一个以秒为单位时间段
3.httpOnly:当 Cookie 带 httpOnly 选项时,客户端则无法通过 js 代码去访问(包括读取、修改、删除等)这个 Cookie。

cookie弊端:
1.cookie数据可以在客户端被修改伪造
2.数据大时候存放在cookie影响效率

session:
1.每个 session 都对应一个 session_id,通过 session_id 可以查询到对应的 session
2.session_id 通常是存放在客户端的 cookie 中,服务端存好 session 之后将对应的 session_id 设置在 cookie 中发送给客户端
3.当请求到来时,服务端检查 cookie 中保存的 session_id 并通过这个 session_id 与服务器端的 session 关联起来,进行数据的保存和修改

当你浏览一个网页时,服务端随机产生一个很长的字符串,然后存在你 cookie 中。当你下次访问时,cookie 会带有这个字符串,然后浏览器就知道你是上次访问过的某某某,然后从服务器的存储中取出上次记录在你身上的数据。由于字符串是随机产生的,而且位数足够多,所以也不担心有人能够伪造。


cookie:直接setcookie("id",111);向客户端设置cookie,响应头里面就会有:Set-Cookie: id=111。第一次访问的时候客户端没有cookie信息,所以不携带,服务器set-cookie后,下次再访问另一个文件时就会在请求头携带cookie信息。
session:服务器通过cookie发送sessionId到客户端,并在服务端建立一个与session同名的文件。下次访问时就携带服务器发放的sessionId。
session_start(); //生成sessionId添加到响应首部,存到文件或者数据库中。
$_SESSION['name'] = wyc; //将数组内容存放到文件或者数据库中。
$_SESSION['age'] = 111;
session删除:
session_start();
unset($_SESSION['name']); //删除某个元素
$_SESSION = array(); //清空session
setCookie(session_name(),"",time()-10,"/"); //删除客户端中cookie中的session
session_destory(); //删除服务器的session


参照:http://mertensming.github.io/2016/10/19/cookie-session/
https://github.com/alsotang/node-lessons/tree/master/lesson16

原文地址:https://www.cnblogs.com/mentalidade/p/7018183.html