session(1)

http是无状态的,如果需要在多个链接间共享数据,就要在服务器上一个可共享的全局位置,保存可在多个链接间反复使用的状态和数据。

PHP中,session是服务器内存中一个关联数组对象,

session允许将数据存储在web服务器上,从而在整个用户会话过程中保持任何数据。

用户会话是指用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间。

session只会在首次使用服务器端编程语言访问session时,才会创建。

一 session的生命周期

1.打开新浏览器窗口,首次请求服务器时,浏览器就与服务器建立了session,服务器自动给客户端分配一个唯一的标识(sessionid)被存储于客户端本地的cookie中。

  注意:从当前浏览器窗口打开的新链接,不再建立新session,而是和第一个打开的窗口公用一个session。

2.当PHP中调用session_start()函数时,服务器会根据请求中携带的sessionId,从session仓库中加载已经存储的对应sessionId的session对象到内  存

3.当执行PHP脚本时,可用如下方式注册session变量

session_start();
$_SESSION["变量名"]=值;   //同关联数组

 4.当PHP脚本执行结束时,未被销毁的session变量会被临时自动保存到服务器本地的一个指定路径下的session库中暂存,本次浏览过程中,再次需要访问session中保存的数据时,还可以从session库中加载回内存中使用

  这个路径可由php.ini文件中的session.save_path指定

5.只要页面有提交活动,则session的所有项都会保持

6.session失效:

  页面在1440s,也就是24分钟后没有任何提交活动时,session会失效。session内存储的多个数据项是整体失效的。(如在php.ini默认配置session.gc_maxlifetime修改)

  或者关闭浏览器窗口,sessionID自动注销,也会导致session失效

  下次打开窗口,请求服务器时,重新建立新的session,分配新的sessionId。

  

7.会话时间段

  一次会话时间段,是指一个特定的用户,访问一台特定的服务器,并且不间断操作所持续的时间。

  两个用户同一时间段访问同一台服务器,是两个不同的sessionid

  一个用户,关闭浏览器后再次访问同一台服务器,session时间段与关闭前的访问毫无关系

问题:如果客户端关闭浏览器,服务器端不会立刻释放session的,因为当浏览器关闭时,服务器端是不知道的。

所以:session实际存活时间,等于用户连续操作的时间+session过期时间。

  

原文地址:https://www.cnblogs.com/codexlx/p/12503313.html