【发布时间】:2013-06-01 17:02:54
【问题描述】:
我正在测试我的页面,它有一个非常简单的表单:
<form action="script/check.php" method = "post">
<input type = "text" name = "email">
<input type = "submit">
</form>
当我的check.php 文件包含以下代码时,它可以正常工作:
<?
var_dump($_POST);
?>
正如预期的那样,输出是array(1) { ["email"]=> string(5) "hello" }。
当check.php 包含session_start() 时,$_POST 变为空。
<?
session_start();
var_dump($_POST);
?>
现在的输出是array(0) { }。
很难搜索到这个问题,不幸的是我在网上找到的大多数结果都是关于空的$_SESSION变量,这对我来说不是问题。问题是$_POST 为空。
有一个问题:$_POST 在我从本地机器测试页面时正确通过,在存储服务器的网络上。对于其他任何地方,情况并非如此,该站点无法运行。这非常奇怪,因为我几个月来一直在使用这种类型的脚本而没有任何问题,并且外部用户已经能够毫无问题地连接。我认为这是目录权限问题,但如果没有更多信息,我无法确定。
【问题讨论】:
-
你在什么样的服务器上?是本地服务器吗?
-
刚刚在本地堆栈上运行
session_start给出的确切代码,返回array(1) { ["email"]=> string(4) "test" }你是否将其设置为display_errors? -
这是在线的吗?我想测试它检查 http 标头
-
启动会话可能会导致重定向,这将通过 GET 完成,这意味着 POST 数据丢失。您可以使用 firefox 的 firebug nettab 或 httpfox 扩展等轻松验证这一点,并查看是否发生任何重定向。
-
请永远不要启用 register_globals。你不需要它,它是一个主要的安全漏洞,它已经被弃用并且将停止工作。 Rgister globals 与 $_POST 无关,但会为发布的任何内容创建全局变量。 php.net/manual/en/security.globals.php