0

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

我目前正在开发一个应用程序,因为我已经开始构建我的会话库,现在当我打电话时,session_start我收到以下错误:

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

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

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

  • 在我的整个系统中搜索php.ini*文件,检查它们
  • 执行以下命令php --iniamd 验证了 ini 文件
  • 执行以下命令php -i | grep session.auto_start。回应session.auto_start => Off => Off
  • 检查了PHPInfo页面,见下图
  • 检查了 cgi 的 php.ini 文件
  • 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 补丁的 PHP 5.3.5-1ubuntu7.2
  • MySQL:版本 14.14 Distrib 5.1.54,适用于使用 readline 6.2 的 debian-linux-gnu (i686)
  • Nginx:版本:nginx/0.8.54

PHPInfo 屏幕:

在此处输入图像描述

4

4 回答 4

2

我的第一个猜测是您有一个自动前置文件或 .htaccess,它同时正在修改设置。

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

编辑

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

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

于 2011-07-05T17:29:35.700 回答
0

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

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

于 2011-07-05T17:28:43.127 回答
0

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

if (!isset($_SESSION)) {
     session_start();
}
于 2011-07-05T17:34:08.150 回答
0

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

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

于 2011-07-05T17:46:55.813 回答