在使用session之前不能有HTML语言,不能有产生HTML的php函数,比如echo,print等

解决方案 »

  1.   

    新的php4有一套自己的session处理函数。缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp)。 
    这适合或不适合,依你的需求而言。例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将sessions保存在NFS共享中)。另一个潜在的问题是你机器上的数千或数百万个session文件使你的文件系统变得散乱 。 
    对我们来说幸运的是,php4的开发者非常有远见(感谢他们),他们为你我这样的用户提供了扩展session处理的接口。任何一个session处理程序会提供6个基本的函数,它们将被php4的session处理程序调用,所以不用担心怎样调用它们。 
    这些定制处理session的函数是完全透明的。所以你可以改动它们而不会影响你自己的PHP脚本。 这几个函数是: 
    1、sess_open($sess_path, $session_name); 这个函数被session处理程序调用来作初始化工作。需要传给它的两个参数是$sess_path,它对应你的php.ini文件中的session.save_path选项;$session_name,它对应php.ini中的session.name选项。2、sess_close(); 这个函数在页面结束执行并且session处理程序需要关闭时被调用。(注意,不要和sess_destory混淆了,它是用来结束session的) 3、sess_read($key); 这个函数在session处理程序读取指定session键值($key)时。 
    这个函数检索并返回标识为$key的session数据.(注意:你不用担心怎样序列化和反序列化数据,如果你不知道这是什么意思,不要担心它) 注:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于只保存数据的方法。 4、sess_write($key, $val); 这个函数据在session处理程序需要将数据保存时调用,这种情况经常在你的程序结束时发生。 
    它负责将数据保存在下次能用sess_read($key)函数检索的地方。 5、sess_destroy($key); 这个函数在需要消毁session时。它负责删除session并且清除环境。 6、sess_gc($maxlifetime); 
    这个函数负责清理碎片。在这种情况下,它负责删除过时的session数据。session处理程序会偶尔调用它们。 使用方法:session_set_save_handler( 
    "sess_open", 
    "sess_close", 
    "sess_read", 
    "sess_write", 
    "sess_destroy", 
    "sess_gc");这六个函数的内容由你自己写,非常灵活,非常强大!
      

  2.   

    谢谢你peacock,有了php问题,你能够回答。:)我试验的代码是我从书中抄来的,也没说不应该带html啊。而且即使我只使用了一句session_start(),系统也会出现如上类似的错误,是不是系统配置有问题?好象Session根本不能使用一样,而且暂时我还没学到创建自定义的session呢。我现在正主持开发一个动态交易的网站,采用2000 Server 服务器+IIS(Apache)+SQL Server7+PHP,我使用PHP调用SQL Server的存储过程,我负责PHP部分。能不能给我提些建议和应该注意的问题?谢谢。
      

  3.   

    谢谢你peacock,有了php问题,总是你回答。:)我试验的代码是我从书中抄来的,也没说不应该带html啊。而且即使我只使用了一句session_start(),系统也会出现如上类似的错误,是不是系统配置有问题?好象Session根本不能使用一样,而且暂时我还没学到创建自定义的session呢。我现在正主持开发一个动态交易的网站,采用2000 Server 服务器+IIS(Apache)+SQL Server7+PHP,我使用PHP调用SQL Server的存储过程,我负责PHP部分。能不能给我提些建议和应该注意的问题?谢谢。 
      

  4.   

    如果方便的话,把你session_start();前面的句子帖出来,绝对是它前面出错了,我敢保证,因为我看到“headers already ...”这样的错误提示,有两种可能:
    1、前面已经使用过header()、cookie()或session_start();
    2、前面一定有HTML(只是文字都不可以)、echo、print;不过php 4增加了这样的处理!PHP4 的新函数介绍 - 输出信息控制函数
    这些函数可以让你控制你的脚本输出的内容.可以用于许多不同的情况,特别是在你的脚本已经输出信息后需要发送文件头新的情况. 输出控制函数不对使用 header() 或 setcookie() 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用. 例 1. 控制输出<?phpob_start(); //如果没有加上这句的话,会提示“Cannot send session cookie - headers already sent ...的错误
    echo "Hello\n";setcookie ("cookiename", "cookiedata");ob_end_flush();?>在上面的例子中,使用 echo() 的输出内容将会保存在输出缓冲区中,直到调用了 ob_end_flush(). 这样做有意义的地方是,调用 setcookie() 的内容被成功的存储在 cookie 里面而不会引起错误. (正常情况下,你不可以在有数据已经发送后再发送文件头信息到用户浏览器.) 相关函数 header() and setcookie(). 韩数列表
    flush — 刷新输出缓冲区
    保存在输出缓冲区的内容会被发送到浏览器ob_start — 打开输出缓冲区
    这样所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面ob_get_contents — 返回输出缓冲区的内容
    如果你想以后处理输出的内容,可以调用这个函数保留一个备份ob_get_length — 返回输出缓冲区的内容长度ob_end_flush — 结束(发送)输出缓冲区的内容,关闭输出缓冲区ob_end_clean — 删除(放弃)输出缓冲区的内容,关闭输出缓冲区
    如果你的程序发现输出内容有问题,可以放弃所有输出内容,可以防止泄漏某些秘密信息ob_implicit_flush — 打开或关闭直接刷新
    打开后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()。
      

  5.   

    建议你用Apache服务器,我以前试验过,用(Windows 2K Server)IIS的时候,只要打开网页,CPU就100%,感觉像死机,马上换了Apache,CPU 3-5%,速度很快,然后就把IIS开了,后来有用Linux,速度和性能就更快了!我现在用的前台开发环境:  Windows 2K + Apache +  MySQL + PHP服务器:  红旗 Linux 2.0 + Apache +  MySQL + PHP我前断时间闲着,就编了个网上购物系统,放在服务器上测试,已经一个多月没有修改了,里面还有4个后台程序:建库,入库,订单管理,客户管理,最近比较忙,就没有时间去做了,以后会不断加强功能及模块,可能以后会使用Oracle数据库。
      

  6.   

    谢谢你。原来我在前面加了一段html,但是从书上抄来的,现在这些出版物...。原来session必须要这样使。如果session不使用cookies可不可以,否则用户关掉cookis不就坏了?我之所以使用IIS,是因为我这个网站有一部分要用ASP来做。主要是BBS和聊天室部分,等用PHP实现之后我再改用Apache。对了,你说的那个系统能不能让我参观一下?自从学习PHP以来,多亏了你的帮助,才能够进展这么快。我在这里再次表示感谢,如果可能的话,希望能够和你交个朋友。我对VC和网络安全做过一些研究,希望有机会能和你请教。我是河北省的,信箱是:[email protected][email protected],我的oicq是8289945,不过不常在线上。:)谢谢。
      

  7.   

    很抱歉,我几乎已经不用OICQ了,就是在CSDN遇到向你这样的朋友,有一种热情,一种向往,一种心灵的共鸣!对了,你要常常去灌水乐园,那里才是我们的家!各界高手都云集那里,就像一个大家庭。使用IIS也不妨,不过你可以下载iASP,这样使用Apache就可以访问ASP了,毕竟现在60%多的网站都用Apache。我是贵州的,比较落后,也没有什么水平,只是非常热爱Program,很多问题都需要大家一起共同学习和研究。email:[email protected]。我用MySQL和PHP做了一个Forum,非常良好,没有纠错和加密,现在没有放在网上,只在公司内部使用,已经有很多资料灌在里面,有点模仿CSDN,等以后有时间,我把它优化就放上去。我的购物网也使用session,使用的是session_set_save_handler,这样才不会在机器上生成很多文件,我把它保存在MySQL数据库中,cookie技术也使用了,不要怕别人把cookie给关了,我还没见过把cookie给关了的上网者!现在90%以上的动态网站都是用它!购物网做得比较差,还请多提宝贵意见,谢谢!http://202.98.197.137/business.php