codeigniter(CI)的会话问题

时间:2016-05-05 14:09:32

标签: php mysql codeigniter

我在使用codeigniter

开发的live上遇到php会话错误
A PHP Error was encountered

Severity: Warning

Message: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/userts4m/public_html/development/relatioweb/admin/index.php:1)

Filename: Session/Session.php

Line Number: 140

Backtrace:

File: /home/userts4m/public_html/development/relatioweb/application/admin/controllers/User.php
Line: 9
Function: __construct

File: /home/userts4m/public_html/development/relatioweb/admin/index.php
Line: 293
Function: require_once

在localhost工作正常。但是当我在服务器上升时,我们正面临这个问题。

我该怎么做......

10 个答案:

答案 0 :(得分:8)

这两种解决方案都适合我试试。也许他们会为你工作。

有时由于框架配置错误而发生此错误, 转到文件夹applications/config并打开config.php在此文件的开头写这个

<?php
  if (!defined('BASEPATH')) exit('No direct script access allowed');
    ob_start();
    /* Remaining Part Of your file
     .........................................
   */

另一种解决方案是在类的构造函数中编写ob_start() 像这样:

<?php
 if (!defined('BASEPATH')) exit('No direct script access allowed');
   class Your_Controller extends CI_Controller {
     public function __construct() {
       parent::__construct();
       ob_start();
     }
   }

答案 1 :(得分:4)

问题在这里得到了很好的解释How to fix "Headers already sent" error in PHP

为了解决这个问题,我需要实施 输出缓冲的概念(输出缓冲是一种机制,其中不是立即向浏览器发送响应,而是将其缓冲到某处,以便我们可以在整个内容准备就绪时立即发送它)。 因此错误表明index.php中出现问题 我插入了什么

ob_start();

在index.php的开头

答案 2 :(得分:2)

这通常意味着你已经有了session_start()的某个地方而第二个会抛出这个错误。删除多余的。

答案 3 :(得分:2)

根据@kunal@dale建议,/home/userts4m/public_html/development/relatioweb/admin/index.php

中有空格

答案 4 :(得分:1)

尝试使用@session_start();它将绕过错误并开始会话。 请注意@session_start()是代码的第一行。不要在它之前执行或回显任何东西。

答案 5 :(得分:1)

在启动PHP标记之前,此文件中可能有空格。

答案 6 :(得分:0)

检查控制器文件,如果在php标记之前将其删除,则有空格。

答案 7 :(得分:0)

检查文件中是否有多余的空格,或者在我的情况下,在php标记之前(在Iam中使用codeigniter)在application / config / autoload.php中输入一个额外的内容

答案 8 :(得分:0)

 ob_start ([ callable $output_callback = NULL [, int $chunk_size = 0 [, int $flags = 
 PHP_OUTPUT_HANDLER_STDFLAGS ]]] ) : bool
  

此功能将打开输出缓冲。当输出缓冲是   活动的,没有从脚本(头文件除外)发送任何输出,而是   输出存储在内部缓冲区中。

     

此内部缓冲区的内容可以复制到字符串中   使用ob_get_contents()的变量。要输出存储在   内部缓冲区,请使用ob_end_flush()。或者,ob_end_clean()   将以静默方式丢弃缓冲区内容。

答案 9 :(得分:0)

我不得不转到php.ini,并从always_populate_raw_post_data = -1行中删除注释。