美文网首页很实用的知识点总结程序员PHP经验分享
[正儿八经PHP]cookie禁用了,session还能用吗?

[正儿八经PHP]cookie禁用了,session还能用吗?

作者: anonymous66 | 来源:发表于2016-12-23 17:18 被阅读441次
session交互原理

(一)、session工作机制介绍

  • 为每个访问者创建一个唯一的id(<b>UID</b>)
  • 然后基于这个UID来存储变量
  • UID 存储在 cookie 中,或者通过 URL 进行传递

(二)、举个栗子

1、第一次访问某网站

这时服务器生成一个不重复的 <b>SESSIONID</b> 的文件,比如在/var/lib/php/session目录。

2、php会设置sessionid在返回的Response的HTTP头
Response Headers 的 set-Cookie

PHP的sessionid默认的名字是<b>PHPSESSIONID</b>

3、客户端接收到Set-Cookie,将PHPSESSIONID写入cookie
cookie 存储 PHPSESSIONID
4、当你第二次访问页面时,请求头(Request)会携带cookie发送给服务器端
Request Headers 携带 Cookie
5、服务器根据cookie里的PHPSESSIONID去session目录查找对应session文件
6、找到这个session文件后,检查是否过期,如果没有过期,去读取Session文件中的配置;如果已经过期,清空其中的配置

<p>如果客户端禁用了Cookie,那PHPSESSIONID都无法写入客户端,Session还能用?
答案显而易见:不能

而且禁用cookie之后,服务端没有接收到你cookie里面携带的<b>PHPSESSIONID</b>,那么基于HTTP是无状态的,那么你每一次请求,服务器都会当作是第一次请求,这样,每次都会生成一个唯一的sessionid文件

<p>

(三)、那么我们还能用session吗?

我可以通过参数来处理嘛。通过GET或者POST请求,传递参数的方式传递sessionid不就可以了吗

GET http://www.xx.com/index.php?session_id=xxxxx

在渲染页面的时候,强制的给一个sessionid,然后请求的时候再传回来,不就和cookie的方式一样了吗。

但是这样做的方式是不可取的。为什么?

你只要将这个网站发送给别人,那么他将会以你的身份登录并做所有的事情。
所以千万不要使用这种方式,我只是举这个栗子,来让大家更深刻的理解session的机制和原理。

(四)、现状

在现在cookie几乎是不会被禁用的,因为现在网站都非常依赖cookie。然而我们使用session的方式还是需要依赖cookie,不要去使用参数传递这种不可取的方式。

相关文章

网友评论

  • 沐杰90:那就是可用啰:yum:
    Omit03:原则来说 禁用cookie 是可以用session 得 但是不提倡不建议 作者观点不错
    沐杰90:@anonymous66 嗯:stuck_out_tongue_winking_eye:
    anonymous66:@沐杰90 哈哈,文章主要是面试会问这样的问题,真实情况不会用啦

本文标题:[正儿八经PHP]cookie禁用了,session还能用吗?

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