7天入门php-session操作-简介

本文详细介绍了 PHP 中 session 的工作流程及原理,包括如何为每个访问者分配唯一 ID、如何保存和更新会话数据,以及一些注意事项,如序列化限制和会话数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大致了解了session的工作流程:1、客户端访问站点——>2、auto_start或session_start方式检查是否是新用户——>3、对于已经有记录的用户,重建会话;对于新访问的或之前有访问但已经过期的用户会话,重新创建会话, 并自动分配UID (可通过session_id()取得)——>4、用户操作,更新session数据——>5、用户关闭浏览器,根据php.ini中sessionlifetime的设置确定该会话立即销毁还是保存一段时间。

会话支持在 PHP 中是在并发访问时由一个方法来保存某些数据.从而使你能够构建更多的定制程序 从而提高你的 web 网站的吸引力.

一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的会话 id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 URL 进行传递.该id可通过session_id()设置或取得。

会话支持允许你将请求中的数据保存在超全局数组$_SESSION中. 当一个访问者访问你的网站,PHP 将自动检查(如果session.auto_start 被设置为 1)或者在你要求下检查(明确通过 session_start() 或者隐式通过 session_register()) 当前会话 id 是否是先前发送的请求创建. 如果是这种情况, 那么先前保存的环境将被重建.

Caution

如果你打开了 session.auto_start 那么 将对象放入会话的唯一方法是使用 auto_prepend_file 来加载定义这个对象的类,其中,在加载的定义的类时,你不得不使用 serialize() 你得对象,并且事后 unserialize() 它.(即设置为auto_start,则必须加载对象的类,并实现对象的序列化(以能被传输的方式存储),传输后可通过反序列化还原对象。

$_SESSION (和所有已注册得变量) 将被 PHP 使用内置的序列化方法在请求完成时 进行序列化.序列化方法可以通过session.serialize_handler 这个 PHP 配置选项中来设置一个指定的方法.注册的变量未定义将被标记为未定义.在并发访问时,这些变量不会被会话模块 定义除非用户后来定义了它们.

Warning

因为会话数据是被序列化的,resource 变量不能被存储在会话中.(resource变量类型即资源类型,可存储包括文件打开、数据库连接、图形画布区域等的句柄,并不是资源,所以存在会话没有意义,且PHP 4Zend 引擎能自动回收没被占用的资源类型,除了持久数据库连接一特殊情况外。有点抽象,先大致了解。

序列化句柄 (php 和 php_binary) 会受到 register_globals 的限制. 而且,数字索引或者字符串索引包含的特殊字符(| 和 !) 不能被使用. 使用这些字符将脚本执行关闭时的最后出现错误. php_serialize 没有这样的限制.php_serialize从 PHP 5.5.4 以后可用.

Note:

请注意当会话工作时,会话的记录并没有被创建 直到一个变量已经被使用 session_register() 注册或者被添加一个新元素到 $_SESSION 全局数组中. 这点一直有效,无论是否使用 session_start() 函数 来开始会话.

Note:

在 PHP 5.2.2 有一个没有在文档中说明的特性是用文件存储时,即使是 在 open_basedir 被启用,并且 "/tmp" 没有被添加到 允许路径列表中,也能将会话存储到 "/tmp" 目录. 这个特性在 PHP 5.3.0 时已经从 PHP 中被移除了.




原网页:http://php.net/manual/zh/language.types.resource.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值