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变量
1 2 | 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过期时间。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!