加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如果我将感叹号放入变量名称,则会出现奇怪的PHP行为

发布时间:2020-12-13 17:04:20 所属栏目:PHP教程 来源:网络整理
导读:我对 PHP本身有一个最奇怪的问题,我见过. 建立: IIS下的PHP 5.33(也尝试过PHP 5.2.14) 问题: 一旦我将感叹号放入会话数组中的键中,PHP就会删除所有会话数据. 例: session1.php session_start();$_SESSION["foo"] = 'test';header('Location: session2.php
我对 PHP本身有一个最奇怪的问题,我见过.

建立:

IIS下的PHP 5.33(也尝试过PHP 5.2.14)

问题:
一旦我将感叹号放入会话数组中的键中,PHP就会删除所有会话数据.

例:

session1.php

session_start();
$_SESSION["foo"] = 'test';
header('Location: session2.php');

session2.php

session_start();
var_dump($_SESSION);
die();

工作正常,我看到打印出可变数据.

array(1) { ["foo"]=>  &string(4) "test" }

但是,如果我在第一个文件中更改行

$_SESSION["foo!"] = 'test';

要么

$_SESSION["f!oo"] = 'test';

我的意思是如果我添加感叹号 – 当我到达第二个文件时$_SESSION数组为空

array(0) { }

当我在5.2.14时,我认为这是PHP的错误版本,但升级没有帮助.
我甚至不知道问题可能是什么.也许这与Windows安装程序或IIS有关?

有任何想法吗?

解决方法

你的问题是什么?这个错误的原因是什么或如何避免?
第一个可能是因为一些奇怪的PHP内部.例如,您不能使用具有相同结果的数字键.
后一个更简单 – 不要将感叹号放入会话数组中的键.

我记得,PHP会话机制来自PHPLib – 有史以来第一个PHP框架.由一些志愿学生撰写.不是一个非常理想的.一旦在版本4.0中添加到PHP,只能在4.1中使用,但仍然有一些奇怪的遗留问题,例如register_globals支持.后者很可能是您遇到问题的原因. $_SESSION数组键必须是有效的PHP变量名,为了古老的register_globals行为,其中会话变量成为全局PHP变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读