ThinkPHP6.0:Session和Cookie机制的变化

发布时间 - 2019-12-16 00:00:00    点击率:

 

最新的6.0版本对框架的Session和Cookie机制进行了重新设计,摆脱了原有设计的束缚。

Session

新的Session机制不依赖PHP内置的Session会话机制,完全独立实现,优势在于可以兼容任何的运行环境,而且配置参数也大为简化。

新版你不能再使用$_SESSION或者任何php内置的session函数操作Session,必须通过think\Session类或者think\facade\Session静态代理类操作Session数据。

Session对于很多API接口应用来说,不是必须的,而随着前后端分离的应用架构设计越来越多,因此6.0的Session默认是关闭的,系统把Session相关的功能设计成一个独立的中间件,如果你需要使用Session可以单独在应用的中间件定义文件中开启。

默认安装后,在app目录下的middleware.php中间件定义文件中,对可能需要使用的系统中间件预置了注释,你可以直接取消注释,加上:

// Session初始化
'think\\middleware\\SessionInit',

该中间件的作用主要是初始化SessionId,并注入当前的请求对象。初始化的时候会自动读取config目录下的session.php配置。

默认使用文件的方式保存Session数据,支持使用redis、memcache以及memcached。

内置的Session驱动默认配置下,都是支持跨应用读取Session数据的。如果你需要区分不同的应用,保持各个应用的Session数据独立,可以在应用的session配置文件中设置prefix参数,例如:

'prefix' => 'admin',

并且为了防止Session数据过多,文件方式写入Session数据的时候支持垃圾回收机制。可以配置gc_divisor和gc_maxlifetime两个参数来设置GC回收。

Session数据会在当前请求结束后,自动写入,一般只会写入一次。Session数据写入之前会首先进行序列化,默认的序列化方法是serialize/unserialize,你可以在session配置文件中设置serialize参数(数组)来改变默认的序列化机制,例如:

'serialize' => ['json_encode', 'json_decode'],

Session类本身的用法和之前版本基本一致,增加了push方法用于追加一个session数组。

Cookie

Cookie的存取机制是分开设计的,读取操作是通过$_COOKIE读取,写入则通过可扩展的方式满足不同运行环境的Cookie写入要求。Cookie数据的写入操作也是在当前请求发送响应数据之前统一写入。

但在实际使用中,Cookie的用法和之前类似,区别在于不再支持前缀配置和清空操作。

PHP中文网,大量的免费ThinkPHP入门教程,欢迎在线学习!

学习专题:php session (包含图文、视频、案例)

本文转自:https://blog.think/1077719


# session  # cookie  # 如果你  # 运行环境  # 你可以  # 序列化  # 配置文件  # 都是  # 是在  # 目录下  # 但在  # 会在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在香港服务器上快速搭建免备案网站?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  lovemo网页版地址 lovemo官网手机登录  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何在阿里云完成域名注册与建站?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  详解jQuery中的事件  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  js实现获取鼠标当前的位置  Firefox Developer Edition开发者版本入口  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何快速查询域名建站关键信息?  如何批量查询域名的建站时间记录?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Python面向对象测试方法_mock解析【教程】  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何选择PHP开源工具快速搭建网站?  *服务器网站为何频现安全漏洞?  手机网站制作与建设方案,手机网站如何建设?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何处理和验证JSON类型的数据库字段  JavaScript如何实现错误处理_try...catch如何捕获异常?  香港服务器部署网站为何提示未备案?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Python图片处理进阶教程_Pillow滤镜与图像增强  如何打造高效商业网站?建站目的决定转化率  如何快速使用云服务器搭建个人网站?  Laravel如何使用Eloquent进行子查询  如何实现javascript表单验证_正则表达式有哪些实用技巧  JavaScript实现Fly Bird小游戏  C++时间戳转换成日期时间的步骤和示例代码  Laravel如何使用Gate和Policy进行授权?(权限控制)  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何破解联通资金短缺导致的基站建设难题?  如何快速打造个性化非模板自助建站?  如何用y主机助手快速搭建网站?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何快速搭建个人网站并优化SEO?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  linux写shell需要注意的问题(必看)  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  网易LOFTER官网链接 老福特网页版登录地址  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何为不同团队 ID 动态生成多个“认领值班”按钮  UC浏览器如何设置启动页 UC浏览器启动页设置方法