PHP中会话控制

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容