php session偶尔写入失败的原因

session_start();

var_dump($_SESSION);

$key = sprintf(‘%05d‘, mt_rand(0, 99999));
$key = strval($key);
$val = time();

$_SESSION[$key] = $val;

这是我的代码,经测试后大部分情况下无法输出刚才设置的session,那就是写入失败了。

我百思不得其解,如果说失败的话都要失败,为何偶尔还有成功的呢?

后来单独测试的时候把error_reporting 全部打开了,发现提示这样的错误

 Notice: Unknown: Skipping numeric key 454352 in Unknown on line 0

经查证,为如下原因

The PHP session storage mechanism was originally built around "registering" variables, so the keys in $_SESSION must be names that could be treated as variables in their own right.

This means that $_SESSION[42] is invalid, because $42 wouldn‘t be a valid variable name, and since $foo[42] and $foo[‘42‘] refer to the same thing, $_SESSION[‘42‘] is invalid as well.

The solution is either to use a prefix on your session variables (e.g. $_SESSION[‘row_count_‘ . $x] = $row[‘Count‘];) or make them into an array, which you can then loop over etc later (e.g. $_SESSION[‘row_counts‘] = array(); ... $_SESSION[‘row_counts‘][$x] = $row[‘Count‘];)

Note: this limitation is actually part of the "serialization handler" used when writing the session to disk, which is why the errors have no context (they‘re fired while PHP is shutting down). In very recent versions of PHP there is a setting of session.serialize_handler which doesn‘t have this limitation

时间: 2024-10-12 19:38:10

php session偶尔写入失败的原因的相关文章

日志文件写入失败(permission denied)

用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permission. Ownership User User是文件的所有者,默认情况下,用户创建了一个文件,该文件的所有者就是该用户. Group 一个用户组能包含多个用户,所有属于这个组的用户都有相同的权限来访问文件.假设你有一个项目,很多用户都需要访问这个项

五,session数据写入memcached

1,session数据通常保存在服务器端的文件中,它的默认过期时间是1440s.我们可以将session数据保存到memcached中,设定memcached的过期时间大于session过期时间即可.这样从内存读取session数据的速度高于从文件读取session数据. 2,session数据如果写入memcached,必须在php.ini中修改session的存取方式和存取路径. 将session.save_handler = files修改为session.save_handler = m

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

数据库连接失败的原因及解决方法

各种业务系统在使用过程中都会遇到一些问题,因数据库连接失败,不能登录管理软件就是其中之一,这个很令人头疼而且常见的问题 一般的业务系统均采用的是SQL数据库,我们这里总结了SQL数据库连接失败的原因和解决方法: 原因一:登录账号.密码.服务器名称.数据库名称登录错误导致不能连接,这个比较常见,仔细检查好所填信息是否正确,填写正确一般就可以解决. 解决方法:当正在使用的软件出现数据库不能连接时,一般就是服务器名出现问题,更改服务器名称一般可以解决问题.数据库如果是安装在本机,服务器名可以用".&q

Exchange服务器提示 Event ID 50 Ntfs (Ntfs) {延迟写入失败} Windows 无法保存文件

环境描述 所有Exchange 2013服务器部署在Vmare exi 6.0虚拟化环境中.Exchange 2013版本为CU10. 问题现象 在Exchange CAS和Mailbox服务器上的系统日志中经常出现 NTFS(ntfs) Event  ID  50,错误信息"{延迟写入失败} Windows 无法保存文件 \Extend\$UsnJrnl:$J:$DATA 的所有数据.数据已丢失. 此错误可能是由计算机硬件或网络连接问题所致.请尝试将此文件保存到其他位置." 问题原因

使用Unity3D是创业团队失败的原因吗?

第一个项目虽然失败了,但是最起码成功上线,并且获得了一定的收入(虽然杯水车薪),也因为第一个项目拉来了投资.但是第二个项目就彻彻底底的胎死腹中了. 没有检讨.没有总结,大家自然而然而又兴高采烈的开启了第三个项目. 我感到有些悲哀.如果我们都不知道自己的弱点在哪里,不明白自己的优势在哪里,如何能够扬长避短?一个创业团队难道靠硬推能推出一款游戏吗? 第二个项目是打算山寨<公主篷特2>,是一款<愤怒小鸟>玩法的带rpg元素的手游.<公主>就是拿Unity做的,并且有一定的3D

CentOs 6.6里kdump启动失败的原因

在VMware中新安装了CentOs 6.6,重启系统发现kdump服务启动失败 先来说一下,什么是kdump kdump 是一种先进的基于 kexec 的内核崩溃转储机制.当系统崩溃时,kdump 使用 kexec 启动 到第二个内核.第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像.第一个内核保 留了内存的一部分给第二内核启动用.由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所 以第一个内核的内存得以保留.这是内核崩溃转储的本质. 启动失败的原因 查看 /etc

系统启动失败的原因分析及解决办法

系统启动失败的原因分析及解决办法 原因分析: 可能是配置文件/etc/fstab中错误了. 查看/etc/fstab配置文件内容: [[email protected] ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Nov  7 18:40:55 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See

adb 启动失败的原因和修改adb端口号

在我们使用Android Studio的时候,有时候就会出现adb打开失败或者启动不了的情况. adb 启动失败的原因:有其他程序占用了adb默认启动的端口号(像我就遇到过,每次只要提前启动了酷狗音乐,adb就会启动失败~这是要我们专心写代码,不要边听歌边撸0.0) 打不开的情况下的解决方案就是打开Android Studio的Terminal终端 使用以下命令: //关闭adb服务 adb kill-server //再重启adb服务 adb start-server 结果:(终端输出以下代码