session_start(): Cannot start session when headers already sent in

1 篇文章 0 订阅
1 篇文章 0 订阅

背景:写的是一个前后台兼备的博客网站,因http是无状态协议,且涉及到私密信息的处理。所以选用的是session,让服务器具有“记忆能力”

 

看起来一切挺美好,然而抽出的部分公共代码在某些页面中不能正常显示了,检查发现:session_start(): Cannot start session when headers already sent in  ----> 头部已经发送进来时,无法启动会话

 

百度经验:

让我删除session_start();周围多余的空格,小白式听话删除空格操作完毕

刷新页面,公共样式依旧没有展示        (×)差评!

 

其他经验:

打开php.in配置文件,并改写其中内容(这里不推荐在记事本中操作此文件)

ctrl + f    输入    session.auto_start    找到如下图所示位置

修改它的值

注意保存并重启Apache服务,已经能成功展现了

然而这里并不是终点,它报了警告 ----> 已启动会话 - 忽略 ----> 像极了治标不治本的模样,那我们继续消灭它

这个警告是由于有的用户已经录入了session,再次进行session_start();会造成请求重复

为了避免后续出现更多的问题,给session_id增加一个判断,如下:

// 若session_id不存在----没有储存session,那么就打开session。若session_id存在跳过不执行session_start();

if (!session_id()) session_start();

至此,无报错无警告,绿色通行

 

拓展:

session_id() 可以用来获取/设置 当前会话 ID

session_id() 的返回值:返回当前会话ID。 如果当前没有会话,则返回空字符串(""

php.ini配置中session.auto_start=0(默认关闭会话),如果想开启会话需要在代码中主动调用session_start();

而在php.ini中设置session.auto_start=1,就已经自动完成了session_start(); ----> 执行session_start();将会产生新的session_id

session.auto_start=1开启会话的好处在于不会因为忘记调用session_start();而导致错误。但是必须要注意一点:使用第三方代码时,一定要删掉全部的session_start();,否则无法得到正确的结果

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值