Warning: Undefined array key "night" in /www/wwwroot/dhaomu.com/wp-content/themes/b2/header.php on line 18

PHP实现禁用或清理Cookies后Session依旧可以还原并可用。

按照正常的逻辑,在禁用浏览器的Cookies后,或者客户端清理Cookies后,我们服务端的Session使用是会受影响的。

禁用Cookies时,Session也不可用,通过GET等方式提交SessionId时,也会受到标签页关闭影响而消失。

清理Cookies后,我们就会丢失之前用户的Session信息。

那么,禁用或清理Cookies后就真的没什么好办法么???

其实是有的,我这里写了个简单的例子,证明禁用或清理Cookies后,重新访问页面依然可以恢复原有的Session Id。

测试页面:TestDemo - Session Id

在这个页面,你可以尝试禁用浏览器Cookies或者清理Cookies,刷新页面后,依然是原来的Session Id。

PHP实现禁用或清理Cookies后Session依旧可以还原并可用。插图

其实具体原理还是很简单的,利用浏览器缓存更新时的ETag特性做为用户识别关键。

加载一个固定地址的JS,JS在第一次加载的时候,会向客户端输出ETag头信息。

那么在再次访问时,客户端会携带 If-None-Match 头信息请求。

而If-None-Match的值就是先前ETag输出的值,原意是用来服务器校验文件是否被修改。

如果文件未修改,就返回304状态码,客户端就不会继续请求剩下的内容。

而这个是不需要依赖Cookies的,所以我们可以把用户的Session储存在ETag中。

每次打开的时候,通过这个JS向页面写出当前用户Session Id的变量。

就实现了,清除Cookies后依然能获取到用户Session Id。

当然,由于是依赖的缓存,如果用户清理了浏览器缓存或者强制刷新页面,依然没啥卵用。

所以,只是演示示例,并不具有实用价值。

至于如何实现禁用Cookies时首次页面向JS传递ID。

我是这样解决的,页面加载JS时,把生成的Session Id写到对应的script标签的data上。

JS首次加载如果没获取到ETag会尝试从自身的data-session-id获取,并通过Ajax的头信息提交到服务器上。

这样,即可实现彻底禁用Cookies依然可用。

温馨提示:
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明

给TA赞赏
共{{data.count}}人
人已赞赏
未整理

室内手绘入门教程视频课程

2021-3-25 0:00:00

未整理

私域流量如何引流?私域流量实战营,7 天收获属于您的私域流量池

2021-3-27 0:00:00

0 条回复 A文章作者 M管理员

Warning: Trying to access array offset on value of type null in /www/wwwroot/dhaomu.com/wp-content/themes/b2/functions.php on line 3914

Warning: Trying to access array offset on value of type null in /www/wwwroot/dhaomu.com/wp-content/themes/b2/functions.php on line 3914
----《》
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索