php中session相关知识(目前了解部分)

本文详细解释了PHP中的ini_set函数用于动态设置配置选项,会话管理和session_start函数用于创建和管理跨页面会话,以及session_serialize_handler配置项对序列化处理的影响。
摘要由CSDN通过智能技术生成

#记录学习知识 

一.ini_set() 

在PHP中,ini_set() 函数用于在脚本运行时设置指定的配置选项的值。这些配置选项可以是PHP的核心设置,例如文件上传的最大大小、脚本的最大执行时间、错误报告级别等。使用 ini_set() 可以临时改变PHP.ini文件中的设置,但这些改变仅在脚本运行期间有效,不会永久更改PHP.ini文件。

函数的基本语法如下:

ini_set(string $varname, string $newvalue): string

  • $varname:需要设置的配置选项名称(即在PHP.ini中的选项名称)。
  • $newvalue:为该配置选项设置的新值。

返回值是旧的配置选项值,如果操作成功。如果操作失败,通常返回一个空字符串。

以下是一些 ini_set() 函数的使用示例:

// 设置脚本最大执行时间为120秒 ini_set('max_execution_time', '120');

// 设置时区 ini_set('date.timezone', 'Asia/Shanghai');

// 设置错误报告级别,只报告运行时错误 ini_set('error_reporting', E_ERROR);

// 设置POST最大数据量为8M ini_set('post_max_size', '8M');

// 设置脚本内存限制为128MB ini_set('memory_limit', '128M');

需要注意的是,并非所有的PHP配置选项都可以使用 ini_set() 函数进行设置。有些选项是“PHP_INI_SYSTEM”类别的,它们只能在PHP.ini文件或服务器配置文件(例如httpd.conf或.htaccess文件)中设置。

此外,ini_set() 在不同的服务器环境中可能表现不同,一些服务器配置可能禁用了对某些设置的更改,或者只能在PHP.ini或.htaccess中更改这些设置。因此,在使用 ini_set() 时,建议查看PHP官方文档以确认哪些选项是可以在运行时更改的。

二.session和session.serialize_handler

在PHP中,$_SESSION是一个特殊的预定义数组,用于存储跨多个页面(即在整个用户会话中)持久化的数据。与其他类型的数据不同,会话数据在页面加载时不会丢失,而会在服务器上保存到用户会话结束(即用户关闭浏览器或者经过一定时间未活动)。

session_start()是一个函数,用来开启一个新的会话或继续已经存在的会话。如果一个会话已经存在(例如,同一个用户在另一个页面已经开启了会话),这个函数将会使用现有的会话。如果会话不存在,这个函数将会创建新的会话。要使用$_SESSION数组存储数据,首先必须调用 session_start() 函数。

// 开启会话 session_start();

// 储存数据到$_SESSION变量 $_SESSION["username"] = "JohnDoe";

session.serialize_handler 是PHP的会话配置选项,定义了会话数据序列化的方法。当PHP存储或检索会话数据时,需要进行序列化或反序列化操作。序列化是将复杂的数据结构(如数组或对象)转化为可以存储或传输的简单字符串;反序列化就是将这种字符串转回原来的数据结构。

session.serialize_handler 可以设置为以下几种值:

  • php:PHP序列化处理。这是默认值,适合大部分应用。
  • php_binary:更紧凑的二进制格式,但并不所有PHP值都支持。
  • php_serialize:使用 serialize() 和 unserialize() 函数处理。比 php 选项更安全,支持更多的数据类型,但不是所有系统都支持。
  • wddx:使用 WDDX (Web Distributed Data Exchange) 格式。

也可以通过扩展定义自定义的序列化处理器。不过,对大多数应用来说,通常使用默认的 php 选项就足够了。

三.session_start()

在PHP中,会话(Session)是一种在服务器上存储用户数据以便跨多个页面请求或访问期间使用的机制。它是一个全局性质的存储方式,允许你为每个访问者创建一个独特的会话,并且这个会话可以保持一定时间的持久化状态。

session_start() 的作用

session_start() 函数的作用是启动新的会话或者继续已有的会话。当你调用 session_start() 函数时,PHP将执行以下操作:

  1. 检查是否已经存在一个会话ID,如果存在,它将使用这个ID继续旧的会话;如果不存在,它将创建一个新的会话ID。
  2. 将会话ID发送到用户浏览器,通常是通过一个名为 PHPSESSID 的cookie。
  3. 根据会话ID,加载会话数据并将其填充到全局数组 $_SESSION 里,使得你可以在脚本中访问这些会话数据。

session_start() 必须在脚本输出任何内容到浏览器之前被调用,因为它需要发送头信息。

$_SESSION 数组的作用

$_SESSION 是一个超全局变量,它是一个关联数组,包含了会话变量的名字和值。这些会话变量在会话开始时通过 session_start() 函数填充,然后可以在整个会话期间使用。

session_start(); // 开启会话

// 设置会话变量 $_SESSION["username"] = "JohnDoe"; $_SESSION["email"] = "john@example.com";

// 访问会话变量 echo $_SESSION["username"]; // 输出 JohnDoe

会话的持久化

会话数据通常存储在服务器的临时文件夹中,但这个存储位置可以通过修改 session.save_path 配置选项进行改变。会话数据在每个页面请求结束时写入存储,并在每个新请求时(通过 session_start())读取。

会话的安全性和生命周期

  • 会话ID应该保持安全,防止会话劫持。
  • 会话数据保持在服务器上,因此敏感信息不会直接暴露给客户端。
  • 会话可以设定过期时间,超过这个时间不活动的会话将被自动清理。
  • 会话也可以通过 session_destroy() 函数显式地销毁。

总之,会话在PHP中是用来维持用户状态和存储跨页面请求的用户数据的重要工具。通过 session_start() 和 $_SESSION,你可以在用户浏览你的网站时为他们提供一致的、个性化的体验

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值