session

Posted codexlx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session相关的知识,希望对你有一定的参考价值。

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过期时间。

  

以上是关于session的主要内容,如果未能解决你的问题,请参考以下文章

一个队asp.net session进行了再次封装的C#类的代码

redis存储session配制方法

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

sqlserver-处理死锁

暑假自学JAVA Web心得

hibernate在使用getCurrentSession时提示no session found for current thread