这是我在index.php中的前5行:
<?php
session_start();
if (!isset($_SESSION['cart'])) $_SESSION['cart']='';
$page = $_GET['page'];
?>
等等.. 我正在通过firefox-&gt; firebug-&gt; firecookie插件查看会话,并且没有创建会话。(我很确定,因为昨天工作的购物车今天无法工作。) 任何想法为什么会发生这种情况以及如何解决它?
我在启用错误时发现了这个: 警告:session_start()[function.session-start]:无法发送会话cookie - 已经在/ home / controll / public_html中发送的输出(/home/controll/public_html/metalkonsult.com/index.php:1中的输出)第2行/metalkonsult.com/index.php
我进一步探讨了 - 发送到浏览器的东西,但我不知道它的来源。我做了一个var_dump(headers_list());在第一行,这就是我得到的:
array(2) { [0]=> string(23) "X-Powered-By: PHP/5.2.6" [1]=> string(23) "Content-type: text/html" }
如何关闭此功能?是什么发送的?
我设置session.auto_start = 1 在网站文件夹中的php.ini中 会议现在工作.. 不知道造成问题的原因,但问题暂时得到解决
答案 0 :(得分:8)
如果我在你的php开始标记(&lt;?php)之前看到的空格也在源代码中,那么这就是原因:)确保在session_start调用之前没有输出。
您可以使用firebug检查确切的输出,方法是转到网络选项卡,找到PHP文件传输,展开它,然后查看响应选项卡。你可以在session_start之后放一个打印件,看看它出现在哪里......它应该是第一件事。
否则,如果您有指向日志的php错误,请查看日志中是否有任何内容。最后,确保浏览器也显示会话cookie:某些浏览器不显示它们。
答案 1 :(得分:5)
首先会向浏览器发送一些导致标题发送的内容。检查代码以确保PHP代码之前没有一个空格。
答案 2 :(得分:2)
某些编辑器在文件开头添加一个不可见的UTF-8字节顺序标记。根据各种服务器软件版本,它可能会也可能不会发送到浏览器。你能检查源代码的十六进制转储,并确保前5个字节是3c 3f 70 68 70
吗?
答案 3 :(得分:1)
适合我。确保您的服务器具有保存会话数据的文件夹的写入权限(检查您的会话路径:http://php.net/manual/en/function.session-save-path.php)
<?php
session_start();
$_SESSION['cart'] = "test<br />";
print $_SESSION['cart'];
if (!isset($_SESSION['cart'])) $_SESSION['cart']='';
print $_SESSION['cart'];
//blank it out
if (isset($_SESSION['cart'])) $_SESSION['cart']='';
print $_SESSION['cart'];
?>
输出
test
test
@Palantir:空白并不重要。
答案 4 :(得分:1)
这是第一个被调用的PHP页面还是包含在另一个页面中?
如果是第一个,请尝试在php.ini上启用output_buffering。然后,您可以通过致电ob_get_contents()
答案 5 :(得分:0)
我遇到了两个不同的问题:
1-在文件开头有一个空行的情况下,php 5.2推送已经发送的标题&#39;警告。
如果&lt; ?php位于脚本的第2行,然后是空白行 这可能会导致php标头功能无法正常工作等问题。
2- PHP output_buffering默认关闭。 如果你正在使用共享主机和代码在localhost上工作,也许这就是原因。 只需在php.ini或local .user.ini
中设置这些参数即可output_buffering = 4096