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

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,不要去使用参数传递这种不可取的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 6,915评论 1 17
  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 4,922评论 0 51
  • 注:本文转载自前端大全 背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称...
    楠小忎阅读 3,887评论 0 0
  • Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_...
    寻回骄傲阅读 7,975评论 0 18
  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 6,588评论 2 38