使用session为何报错,请教高手

使用session为何报错,请教高手

报错信息


[复制到剪切板]
CODE:
Warningsession_start() [function.session-start]: Cannot send session cache limiter headers already sent (output started at C:\PHP_turing\turing_web_php\libs\propertys\Login_pros.inc:11in C:\PHP_turing\turing_web_php\funs\login.php on line 8 ;


引入的代码:

[复制到剪切板]
CODE:
include ('../libs/propertys/Login_pros.inc');
 
session_start(); ;

因为注册了对象变量,所以在启用session前引入了该对象的类定义,可是为何出错,求教高手

session_start(); 之前不能有输出。
把session_start();放在最前面
如履薄冰

先谢谢斑竹啦

可是,我再session中注册了对象,对象的类声明应该放在session_start()前面的,include中的文件就是那个类的声明代码,而且我的项目用的是UTF8编码格式,开发工具是eclipse



[复制到剪切板]
CODE:
Fatal errormain() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete objectPlease ensure that the class definition &quot;Login_pros&quotof the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\PHP_turing\turing_web_php\pages\page_styles\homePage_01.php on line 32 ;



把session_start()放在了最前面后的报错

我刚才在网上查了一下,是不是因为我包含的类文件中有什么BOM之类的标签阿,以前没听说过,求教斑竹阿!

不好意思上面说得太笼统了,这次说的具体一点,请大家帮忙看看

在index.php页面中调用的语句;

include ('../libs/propertys/Login_pros.inc');
session_start();

../libs/propertys/Login_pros.inc中的类声明


[复制到剪切板]
CODE:
<?php
 
##########################################################
 ###filename: Login_pros.inc
 ###filelocal: root/libs/propertys/Login_pros.inc
 ###author:  turingwang          
 ###version:  version 1.0  
 ###function: 定义一个包含form中所有操作属性的类
 #########################################################
?>
<?
php
class Login_pros {
 
 private 
$user_name;
 private 
$password;
 private 
$message;   //用于提示出错信息,准确来说message并不属于form的属性
 
 /*工厂模式,采用静态方法生成一个对象*/
 
public static function create(){ 
  return new  
Login_pros;
 }
 
 public function 
__construct(){
  
$this->user_name $_POST['user_name'];
  
$this->password $_POST['password'];
  
$this->message '';
 }
 
//相关属性的提取/设置方法
 
public function get_user_name(){ return $this->user_name;}
 public function 
set_user_name($user_name){ $this->user_name $user_name;}
 
 public function 
get_password(){ return $this->password;}
 public function 
set_password($password){ $this->password $password;}
 
 public function 
get_message(){ return $this->message;}
 public function 
set_message($message){ $this->message $message;}
}
?> ;


当使用include命令调用时报错,
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:PHP_turingturing_web_phplibspropertysLogin_pros.inc:11) in C:PHP_turingturing_web_phpfunslogin.php on line 8



而当我将类的声明直接复制到index.php中,也就是直接把类声明代码写在了index.php中的session_start()前面的时候,运行正常,这是什么原因呀,我整个项目的编码格式是UTF8,会不会有什么默认标签出现在了我类声明的文件中了,期待高手回答!

不好意思上面说得太笼统了,这次说的具体一点,请大家帮忙看看

在index.php页面中调用的语句;

include ('../libs/propertys/Login_pros.inc');
session_start();

../libs/propertys/Login_pros.inc中的类声明

<?php
##########################################################
###filename: Login_pros.inc
###filelocal: root/libs/propertys/Login_pros.inc
###author:  turingwang         
###version:  version 1.0  
###function: 定义一个包含form中所有操作属性的类
#########################################################
?>
<?php

class Login_pros {

private $user_name;
private $password;
private $message;   //用于提示出错信息,准确来说message并不属于form的属性

/*工厂模式,采用静态方法生成一个对象*/
public static function create(){
  return new  Login_pros;
}

public function __construct(){
  $this->user_name = $_POST['user_name'];
  $this->password = $_POST['password'];
  $this->message = '';
}
//相关属性的提取/设置方法
public function get_user_name(){ return $this->user_name;}
public function set_user_name($user_name){ $this->user_name = $user_name;}

public function get_password(){ return $this->password;}
public function set_password($password){ $this->password = $password;}

public function get_message(){ return $this->message;}
public function set_message($message){ $this->message = $message;}
}
?>当使用include命令调用时报错,
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:PHP_turingturing_web_phplibspropertysLogin_pros.inc:11) in C:PHP_turingturing_web_phpfunslogin.php on line 8



而当我将类的声明直接复制到index.php中,也就是直接把类声明代码写在了index.php中的session_start()前面的时候,运行正常,这是什么原因呀,我整个项目的编码格式是UTF8,会不会有什么默认标签出现在了我类声明的文件中了,期待高手回答!

问题出在了我用红字标出的地方,将多余的一对<?php ?>标签去掉好就可以正常使用了,不知道是什么原理



[ 本帖最后由 turingwang 于 2007-12-20 15:03 编辑 ]

session_start(); 之前不能有输出。
我想你没有弄清楚输出的含义。
空格,换行都是输出。你那里不是有个换行吗?
还有html代码,php中的echo,php的notice,warming,error都是输出
如履薄冰

明白了,呵呵,感谢斑竹!