session在浏览器关闭时进行何处理?以及回收机制

简介: 当浏览器关闭的时候,会 清空Cookies ,这是浏览器对自己软件的操作,但是并不能对服务端的储存文件进行操作,所以这个时候服务端的session文件将继续生存。 当我们关闭浏览器,甚至电脑重启,短时间内服务端的session仍保存着,直到它被回收,这个时候我们通过一些手段模拟sessionid,仍可以继续保持会话进行。

Session会话机制被广泛应用在JSP、ASP、PHP等语言中。一般用来储存登陆状态或者其他的一些需要验证权限的状态。 以下类似代码在每个系统里应该都会存在


<?php
$userAccount = $_POST['user_account'];
$passWord    = $_POST['password'];
# 这里一般查询数据库验证用户是否存在、密码是否正常等
$vif = true;
if ( $vif ) {
    $_SESSION = $userInfo;
    echo '登陆成功';
} else{
    echo '登陆失败';
}


接着就可以在浏览器中浏览需要登陆状态的页面了。 那么,当我们关闭浏览器的时候,服务器上的session都进行了什么处理?


Session的储存机制


我们先来看一下session的创建储存。 SESSION的实现中采用COOKIE技术。 SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE; 在服务器端保存其他session变量,比如session_name等等。 当用户请求服务器时也把session_id一起发送到服务器,通过 session_id提取所保存在服务器端的变量,就能识别用户是谁了。 所以当我们创建一个session会话时候进行了如下的处理:


  • 向服务器端写入session内容(一般默认是文件格式,文件储存位置可以通过配置文件修改) 比如我们上面储存的 $userInfo 变量信息,并且产生了一个 SessionId 编号。
  • SessionId 编号通过响应内容顺带返回给客户端
  • 客户端将 SessionId 编号储存在 Cookies 中。
  • 接下来客户端向该服务器发送的请求将带上 SessionId 编号,服务端便可以通过编号得到用户登录状态和信息。


浏览器关闭


当浏览器关闭的时候,会 清空Cookies ,这是浏览器对自己软件的操作,但是并不能对服务端的储存文件进行操作,所以这个时候服务端的session文件将继续生存。 当我们关闭浏览器,甚至电脑重启,短时间内服务端的session仍保存着,直到它被回收,这个时候我们通过一些手段模拟sessionid,仍可以继续保持会话进行。(当然你必须在你关闭浏览器之前把sessionid记下来了) 让session失效的原因只有两个:


超时,服务器自动回收。可以在配置文件中决定它的生存时间等。 程序主动销毁。比如 $_SESSION = NULL;


gc回收机制


PHP采用Garbage Collection process(gc)对过期session进行回收。 上面已经讲到可以通过配置文件修改session的生存周期(创建后不进行活动开始计时) 比如我们登陆了一个页面,然后再也没有进行过操作,一直在挂机着,一段时间后将会自动过期退出登陆 所以说每个服务端的session文件都会记录 最后的活动时间,等当前时间已经大于最后活动时间+生存周期,GC机制将会把该session文件清空回收。 那该gc机制是不是一直在监听检测每一个session文件?当然不是了~当访问量过大时,session文件将会很多,不停处理会让服务器造成不小的开销。 gc是按照一定概率启动的, 三个与PHP session过期相关的参数(php.ini中):


session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440


gc启动概率 = gc_probability / gc_divisor = 0.1% 意思是每次session文件更新时,便会有 0.1% 的几率进行检测回收过期的session。但是如果访问量很小,可能会造成很多session文件过期了,但是仍然没有进行检测回收,这个时候我们就要通过修改上面的三个参数,来让GC启动的几率变大,让session过期的检测会更准确。

目录
相关文章
|
10月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
监控 前端开发 JavaScript
记录浏览器节能机制导致Websocket断连问题
近期,在使用WebSocket(WS)连接时遇到了频繁断连的问题,这种情况在单个用户上每天发生数百次。尽管利用了socket.io的自动重连机制能够在断连后迅速恢复连接,但这并不保证每一次重连都能成功接收WS消息。因此,我们进行了一些的排查和测试工作。
702 1
记录浏览器节能机制导致Websocket断连问题
|
JavaScript 前端开发 开发者
浏览器事件机制详解
浏览器事件机制详解
200 1
|
存储 JavaScript 前端开发
在?聊聊浏览器事件循环机制
在?聊聊浏览器事件循环机制
107 0
|
前端开发 JavaScript 数据可视化
探索浏览器的内心世界:渲染机制的奥秘
探索浏览器的内心世界:渲染机制的奥秘
探索浏览器的内心世界:渲染机制的奥秘
|
存储 缓存 前端开发
|
Web App开发 自然语言处理 JavaScript
JS进阶(五)同步异步编程及浏览器的底层渲染机制
浏览器渲染机制 浏览器底层渲染机制 一个页面从服务器访问,拿到页面源代码之后做的事情是什么? 生成Dom树(DOM Tree) => 对HTML文件的处理 基于HTML获取的是流文件 (进制编码) 把进制编码编译为具体的字符 按照令牌TOKEN进行解析 (分词/断词) 生成具体的节点 (元素标签/文本节点....) 按照相互的依赖关系生成一个DOM树 (节点树)
232 0
|
缓存 边缘计算 前端开发
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
|
算法 JavaScript 前端开发
浏览器原理 12 # 垃圾回收:垃圾数据是如何自动回收的?
浏览器原理 12 # 垃圾回收:垃圾数据是如何自动回收的?
223 0
浏览器原理 12 # 垃圾回收:垃圾数据是如何自动回收的?
|
Java
网页退出登录,清空session,设置登录页面的浏览器的返回按钮失效!
网页退出登录,清空session,设置登录页面的浏览器的返回按钮失效!
302 0

热门文章

最新文章