这不是你的平均会话无法启动问题,没有空格,我没有在另一个文件中调用它等。
我正在开发一个应用程序,因为我已经开始构建会话库,现在当我调用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
grep -lir "session_start" *
仅显示我的图书馆文件我已经创建了一个基本的测试脚本来测试我刚刚调用会话启动的位置。
phpinfo()
调用有效php.ini为/etc/php5/cgi/php.ini
的统计信息,因此在运行cat /etc/php5/cgi/php.ini | grep session.auto_start
后我得到session.auto_start = 0
,因此它被禁用,可能是NGinx吗?
有没有人知道发生了什么,下面是一些服务器信息:
PHPInfo屏幕:
答案 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。可以帮助你缩小范围。