会话开始失败

时间:2011-07-05 17:26:41

标签: php session autostart

这不是你的平均会话无法启动问题,没有空格,我没有在另一个文件中调用它等。

我正在开发一个应用程序,因为我已经开始构建会话库,现在当我调用session_start时出现以下错误:

  

会话已经开始 - 忽略session_start()

对于那些希望查看来源的人:https://github.com/AdminSpot/ASFramework/blob/master/system/libraries/session.php

这通常意味着session.autostart指令设置为1,但那就是......它不是,它设置为0并且我通过执行以下操作验证了这一点:

  • 在我的整个系统中搜索php.ini*个文件,检查它们
  • 执行以下命令php --ini并验证了ini文件
  • 执行了以下命令php -i | grep session.auto_start。以session.auto_start => Off => Off
  • 回复
  • 检查了PHPInfo页面,见下图
  • 检查了php.ini文件中的cgi
  • nginx上没有htaccess文件
  • grep -lir "session_start" *仅显示我的图书馆文件
  • 重启FastCGI,Nginx和整个服务器

我已经创建了一个基本的测试脚本来测试我刚刚调用会话启动的位置。

phpinfo()调用有效php.ini为/etc/php5/cgi/php.ini的统计信息,因此在运行cat /etc/php5/cgi/php.ini | grep session.auto_start后我得到session.auto_start = 0,因此它被禁用,可能是NGinx吗?

有没有人知道发生了什么,下面是一些服务器信息:

  • PHP:带有Suhosin-Patch的PHP 5.3.5-1ubuntu7.2
  • MySQL:Ver 14.14 Distrib 5.1.54,debian-linux-gnu(i686)使用readline 6.2
  • Nginx:版本:nginx / 0.8.54

PHPInfo屏幕:

enter image description here

4 个答案:

答案 0 :(得分:2)

我的第一个猜测是你有一个auto-prepend file或.htaccess,同时修改设置。

您可以使用ini_get检索session.auto_start和auto_prepend_file的值以进行确认。 phpinfo()也应该有用。

修改

可能是您的会话库被实例化了两次吗?由于return $this->session_started是一个实例变量,因此可能会导致问题。如果将其设置为类级变量会发生什么?

旁注: 您在return $this->session_started = true;方法的末尾也有start()。这应该没关系,但看起来很有趣。

答案 1 :(得分:0)

.htaccess包含php_value session.auto_start 1怎么样?命令行上的PHP将完全忽略.htaccess文件中的设置覆盖。请记住,命令行PHP和基于Web的PHP在大多数标准配置中都有完全不同的.ini文件,因此通过命令行检查是浪费时间。

我建议让你的脚本在你的一个session_start调用之前立即执行phpinfo(),并检查那里的有效设置。

答案 2 :(得分:0)

无论如何,您只需验证会话是否已经开始。

if (!isset($_SESSION)) {
     session_start();
}

答案 3 :(得分:0)

http://php.net/manual/en/function.session-start.php#90007

检查并查看您是否正在传递会话cookie。可以帮助你缩小范围。