探讨Session机制 | PHP基础笔记

探讨Session机制 | PHP基础笔记

终于迎来开学季

说在前面

    这篇文章就跟大家整理一下Session的笔记。在讲Session之前,我们先来说说为什么会有Session会话机制。

    当我们用浏览器打开一个网页时,会通过HTTP协议进行请求,我们都知道HTTP协议是无状态、无记忆的。什么叫做无状态、无记忆呢?可以这么理解:用户请求的A页面,与用户请求的B页面是没有任何关系的,互不认识,也互不关联,但是这样的请求方式的优点是快。

    这就带来了一个问题。我们一般在访问一个站点时,都希望在A页面登录后,再来到B页面时也是登录状态的,但是由于HTTP请求时无状态、无记忆的,因此两次请求时互不认识的。那怎么办呢?不可能同一个站点每个页面都要登录一次吧。

    这时,Cookie就出来了,Cookie说你的信息可以存在我这里,因此就把数据信息存在Cookie里了,(关于Cookie,我们在上一篇笔记也给大家展示出来了,Cookie这点事儿 | PHP基础入门篇)。读过这篇文章的同学都知道,Cookie它是存储在客户端的,用户可以随意修改,它不安全啊,那又咋整?

什么是Session呢?

   有同学说,既然Cookie数据它存储在客户端上不安全,那就把这些状态信息存储在服务器上呀。诶这位同学,你骨骼惊奇哦!没错,这时Session就出来了。Session可以解决在一次会话中处理两个HTTP的请求的关联,同时Session信息将存储在服务器上,如此便能解决安全上的问题。

No.1

多学一点

什么是会话?

我们拨打10086时,会话从服务台接通后开始;我们进行话费查询时,服务台响应,这是会话中的一个请求;当我们进行套餐更改时,服务台响应,这又是会话中的一个请求。挂掉电话后,会话也就结束了。

那么会话有什么特性呢?

首先,一个会话中可以也可能包含多个请求;其次,在一个会话中,发出请求的用户身份是唯一的。

在Web网页中,用户从打开浏览器的第一个页面时,会话也就开始了,用户进行各种请求后(访问各种网页),关闭浏览器后会话也就结束了。

1.Session工作原理

探讨Session机制 | PHP基础笔记

来源:图片来源于网络

说明:

    当我们第一次访问A网站时,会先进行登录的操作,在勾选记住账号密码并登录后,会进行第一次HTTP请求,服务器接到请求并验证成功后,会生成一个类似于”身份证”的Session-id,并产生一个Session文件(主要存储用于登录的账户信息等),同时也向浏览器回传Session-id,告诉浏览器存储这个Session-id到Cookie数据区里。浏览器接收到指令后,会把Session-id存到浏览器对应的COOKIE数据区,如此便完成了第一次请求和应答过程。

    当我们进行第二次(第n次)访问A网站时,同样也会进行HTTP请求,此时会携带之前存的Session-id,当服务器接到请求后,首先会根据Session-id去Session文件中寻找对应的文件,找到相应的Session文件后取出里面存储的账户信息,并与数据库的账户信息进行验证配对,以完成自动登录。至此,第二次(第n次)请求和响应过程就完成了。

No.2

多学一点

  1. 与Cookie相同,Session数据也是由服务器生成的,而不是客户端。而Session数据也将存储在服务器端。

  2. 2.与cookie可分为:敏感数据如登录信息等用session,不敏感的如营销推广类的用cookie。

2.开启Session会话

描述:启动新会话或者重用现有会话;

语法:bool session_start(void);

提示:$_SESSION 变量默认不存在的,与$_POST、$_GET、$_FILES不一样,因此,需要先开启$_SESSION,才能使用$_SESSION变量;另外,每个需要SESSION数据的页面,都需要开启SESSION功能;

注意:SESSION功能,不能重复开启(同一个页面不能开2次);

返回:成功开始会话返回TRUE,失败返回FALSE。

探讨Session机制 | PHP基础笔记

提示:SEESION文件的保存位置。

探讨Session机制 | PHP基础笔记

Session操作

1.添加SESSION数据

描述:对Session的管理(增删改查),都是通过超全局数组$_SESSION进行的;

语法:$_SESSION[key] = value

提示:一个网站不管添加多少个SESSION数据,最终在浏览器端只存储一个SESSION的ID值,该ID值是经过加密的,并且永不重复。key只能是string类型的数据。

SESSION文件在服务器端的存储位置:C:windowstemp(wamp可能存于wamp下的tmp文件夹下

探讨Session机制 | PHP基础笔记

2.读取Session数据

语法:$value = $_SESSION[key];

提示:每次SESSION操作,都要先开启SESSION功能;

探讨Session机制 | PHP基础笔记

3.删除SESSION数据

使用unset()函数,删除一个SESSION数据;

探讨Session机制 | PHP基础笔记
探讨Session机制 | PHP基础笔记
探讨Session机制 | PHP基础笔记

4.销毁SESSION文件

描述:删除当前的SESSION文件,不影响其他的SESSION文件。

语法:bool session_destroy(void)

探讨Session机制 | PHP基础笔记

SESSION对应COOKIE的配置(php.ini)

1.SESSION对应COOKIE过期时间设置

修改php.ini配置项:

session.cookie_lifetime

探讨Session机制 | PHP基础笔记

2.SESSION对应COOKIE有效路径设置

修改php.ini配置项:

session.cookie_path

探讨Session机制 | PHP基础笔记

3.SESSION对应COOKIE域名有效性设置

修改php.ini配置项:

session.cookie_domain

探讨Session机制 | PHP基础笔记

4.是否仅限HTTPS来发送SESSION对应的COOKIE数据

修改php.ini配置项:

session.cookie_secure

探讨Session机制 | PHP基础笔记

5.是否仅限HTTP来发送SESSION对应的COOKIE数据(JS是否能用)

修改php.ini配置项:

session.cookie_httponly

探讨Session机制 | PHP基础笔记

SESSION文件的垃圾回收机制

我们在上网的过程中,一般能看到,每个网站都有登录和退出。当我们登录后,完成我们自己的需求后,如果我们执行退出操作,则会执行session文件删除的操作。如果我们不退出,而是直接关闭电脑或者浏览器,则无法执行session文件的删除操作,当下一次我们再登录时,会生成另一个session文件,上一次的session文件就不能用了,因此就成为了“垃圾文件”。

1.什么是SESSION的垃圾回收机制?

1)SESSION垃圾回收机制:就是将过期的SESSION服务器文件删除的机制;

2)SESSION会自动删除那些过期的服务器端session数据区文件;

3)修改php的配置文件php.ini。

4)gc:即garbage collection(垃圾回收机制)

2.垃圾回收的周期:session.gc_maxlifetime

探讨Session机制 | PHP基础笔记

提示:每24分钟清理一次。

3.垃圾回收的概率(百分比):session.gc_divisor

回收概率:分子/坟墓,得到一个百分比。如果达到了100%就清理。

如:1/1000,每1000人访问,才会清理一次。

首先判断时间是否达到24分钟,当时间达到24分钟时,再看访问的人数是否到1000人,当人数达到1000时,则进行清理。如果时间到了24分钟,而人数不达到1000,则不清理,继续等第2个24分钟,…。

探讨Session机制 | PHP基础笔记

注意:当多人访问时,没用的垃圾文件才会清理较快。一般回收概率不要设置太小,要不然会进行频繁的清理操作,会占用服务器的资源。

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » 探讨Session机制 | PHP基础笔记

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏