PHP开发设计介绍及实例介绍(三)会话技术session

2024-05-31 10:48

本文主要是介绍PHP开发设计介绍及实例介绍(三)会话技术session,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

会话技术-------session技术

使用session将会话数据存储于服务器端,同时使用会话技术可以区分浏览器;

为每个会话数据建立独立的会话数据区(来存储当前会话的全部数据);每一个会话数据区存在唯一的标志;同时浏览器端用cookie存储该唯一的标志sessionID;做配对使用;sessionID存储于cookie中;sessionID在cookie中就是一个普通变量;

服务器响应的时候,就会自动设置sessionID到cookie中;


在服务器响应的时候设置sessionid到cookie中;



开启session机制:session_start();

在开启session_start()之前,$_SESSION是不能使用的;




增删改查(下面几句话);每一个脚本周期内如果要使用session;必须先开启session.



设定:


判断:


session的属性:

--------有效期:默认会话周期结束(浏览器关闭);如果session失效,下次请求时,cookie就不会携带sessionID,所以服务器端就获取不到session数据区的数据,但是session数据区的数据还是存在服务器临时目录中(成了废弃的数据),至于什么时候销毁session数据区的数据,要看session的垃圾回收机制;如果cookie没有携带SESSIONID,就会新建一条SESSSIONID,又建立一个session数据区;

-------------有效路径:默认整站有效;(cookie是默认当前目录和后代目录);

-----------有效域:默认当前域有效;

-----------是否仅安全连接:默认false;

-----------是否仅为http或https使用httonly:默认false;

session的属性取决于存储于浏览器端的sessionID的cookie变量;

如果需要更改session数据的属性,其实是更改存储在浏览器端的seessionID的属性

在php。ini中设置;




更改session属性:


session的键(SESSIONID)和值是特定的,不需要添加到设置中,所以有五个参数;

session——set_cookie_params(有效期是时间间隔,cookie用的是时间戳,要注意),有效路径,有效域,是否仅安全传输,是否httponly);要在session_start()前设置完毕

cookie是针对单个会话数据做设置;session是针对所有的session数据做的设置;

如果对session的属性做修改,会对服务器造成压力(session是存储在服务器端的);项目中一般不对session的属性做修改;如果需要对数据做长时间的保存,则用cookie;

session可以存储任意数据类型(不包含资源),资源不能序列化,资源是php外部的;cookie只能是字符串的数据类型;

session数据区内的数据是序列化后才存储的;

$_SESSION数组的下标只能是字符串类型

session_start()类似于header();前面不能有输出(PHP标签外的都算输出,echo,var_dump等);

脚本周期和会话周期不是同一个概念:脚本周期是程序关闭,会话周期是浏览器关闭;

session 数据区(是一个文件)的操作:


自动的在会话周期(浏览器关闭)结束前($_SESSION 销毁前),吧session数据存到session数据区;在脚本周期内是用$_SESSION这个变量来管理session数据。



在一个脚本周期内,只对session数据区读一次(开启session的时候),写一次(基本周期结束的时候写);


虽然session数据区销毁了,但是在脚本周期内$_SESSION中还有数据,但是脚本周期结束后,就不会自动写入session数据区了(原因是关闭了session机制);因此下次脚本周期就不能获取session数据了;




ini中的 session .name变了,PHPSESSID就变了;

注意:







参数的顺序是固定的;要在session开启前设置;

重写的session机制,改变了原来默认的实现,现在都需要在自己定义的函数中做读写操作;

读操作----在session开启的时候被调用;从当前的session数据区读取内容;


创建数据库表存储session数据;


读操作:




删除操作:


调用了session_destroy()销毁 session过程中被调用,才会执行delete;


===如何识别垃圾数据区


垃圾回收机制“:

如何识别垃圾数据:



加上最后处理时间的字段:


 在写操作的时候,带时间戳存储:

开启了垃圾回收机制,可能执行垃圾回收,也可能不执行垃圾回收,是有概率的,可以配置;

这是可能执行的次数;这是基数;

只要开启了session机制,设置了垃圾回收机制概率:就有可能执行垃圾回收机制;从而你就会调用自定义的垃圾回收函数;





可能session数据区过期了,但是还是能读取到数据,那是因为过期的session数据区还没被删掉;

session数据区过期和sessionID过期不一样(sessionID过期就是cookie过期了);



如果重写session机制,要保证session机制不自动开启(配置文件中设置不开启);应为session_set_save_handle()要在session机制开启前设置;


如果不对session的存储做处理,session默认是以文件的形式存储的;重写session存储机制时,将其改为user(建议);


项目中的session如数据库:




注意上面的session_set_save_handler()方法中的参数,如果参数是函数时,必须要用数组的形式,其中$this 是指哪个对象的方法,如果静态方法,则需要用类名,如上,数组中的元素位置必须固定;如果参数是方法名时,可以直接写。

cookie和session的区别:


session数据持久化:SESSIONID和服务器端的session数据区;


cookie禁用了,session就不能用了。但是技术上可以实现cookie禁用,session可用get和post来实现(实际中都不会这样做);



session.use_oonly_cookie=1;-----默认情况下只用cookie来传输SESSIONID;0 表示不仅仅使用cookie传输;


是否自动采用其他方法传输sessionID:0表示不采用其他方式(cookie之外的方式);1表示可以使用其他方式传输SESSIONID;



默认session的存储路径是操作系统下的tmp临时目录;






配置文件:

在application目录下创建一个config目录;用来配置项目应用程序;

配置文件的内容格式:


一般在框架类中初始化载入配置文件;

static是针对同一个类中所有方法公用;超全局$GLOABALS是针对整个项目,整个项目中都可以使用;



这篇关于PHP开发设计介绍及实例介绍(三)会话技术session的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017764

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

swiper实例

大家好,我是燐子,今天给大家带来swiper实例   微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法   以下是一个简单的 swiper 示例代码:   WXML(页面结构) <swiper autoplay="true" interval="3

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

20.Spring5注解介绍

1.配置组件 Configure Components 注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>@Sc

在线装修管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,装修队管理,用户管理,装修管理,基础数据管理,论坛管理 前台账户功能包括:系统首页,个人中心,公告信息,论坛,装修,装修队 开发系统:Windows 架构模式:B/S JDK版本:Java JDK1.8 开发工具:IDEA(推荐) 数据库版本: mysql5.7 数据库可视化工具: navicat 服务器:SpringBoot自带 ap

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

DDei在线设计器-API-DDeiSheet

DDeiSheet   DDeiSheet是代表一个页签,一个页签含有一个DDeiStage用于显示图形。   DDeiSheet实例包含了一个页签的所有数据,在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。   一个DDeiFile实例至少包含一个DDeiSheet实例。   本篇最后提供的示例可以在DDei文档直接预览 属性 属性名说明数