`
itdota
  • 浏览: 6829 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

php开发中关于cookie无效的常见解决方法

阅读更多
php开发中关于cookie无效的常见解决方法

cookie存在客户端,跟服务器没有关系的,注意你程序里大小写问题,linux是大小写敏感的,还有php教程的配置,比如是否   register_globals   =   Off   的配置在两边都一样等等。

PHP 的 @、# 符号的意思

function foo($n)
{
    $result = 1/$n;
    return $result;
}
echo @foo(0); // 函数中会产生除 0 错误,但加上 @ 后并不显示该错误。
echo "end"; // 输出 end
# 注释符号

同 // 一样,# 是单行注释符(多行注释符为 /* */)。

由于使用了@setcookie,即便在写入cookies是发生错误,也不会输出,造成了无法发现问题。最后把@setcookie改成 setcookie,程序输出如下错误信息:

Warning: Cannot modify header information - headers already sent by (output started at

经过上网一查,发现原来在进行setcookie设置前不能有任何输出内容,然后就去检查代码,也没有发现在setcookie之前输出了东西,在搜索了一下,发现了问题所在,具体内容如下:

今天在WordPress中文论坛逛了一圈。坛子里人气不高,不过还是有很多高手的。会编写插件和模版的高手和连编辑文件都不会的初学者混在一起,论坛就是这样,哈哈。

看到好几个帖子里提到同一个错误,比如这个帖子里提到的:"Warning: Cannot modify header information - headers already sent by (output started at c:program fileseasyphp1-8wwwwp-config.php:1) in c:program fileseasyphp1-8wwwwp-login.php on line 9"

这是一个很典型的问题。WordPress的程序执行时会首先调用wp-config.php一类的配置文件,也会调用wp-db.php建立数据库教程连接以备后用。这些文件只是做一些设置,并不输出html代码。设置完了后,程序本身开始执行了,有些程序会使用header命令设置一个HTTP头。由于 HTTP头必须在html代码输出之前设置好,否则html代码已经开始往客户端发送了,HTTP也就已经发送过了,没法追回来重新设置了。 WordPress CodeX里对这个问题作出了说明:《How do I solve the Headers already sent warning problem?》。文章指出:要确保各个文件——尤其是经常被编辑的wp-config.php文件——以<?php开头,以?>结尾,前后不能有其他字符。具体到上面的例子,很明显,提示信息说wp-config.php的第一行就开始了html输出,这有可能是第一行的<?php 部分前面被加上的其他字符,比如空格一类的。再联想到以前提到的BOM的问题,那么非常有可能是因为这位朋友使用了Windows的记事本编辑了wp- config.php文件并保存成了UTF-8编码的文档,从而因为BOM的三个字符的输出造成了header命令执行出错。

解决方法

WordPress中文论坛没有提供全文搜索的功能,只能搜索标题,所以我用Google搜索了一下Cannot modify header information site:wordpress.org.cn,好像碰到这个问题的人还真不少。目前大家用的WordPress主要是WordPress英文原版和几个 WordPress中文版。我的中文包又不包含wp-config-sample.php文件,自然不关我的事;WordPress原版用的ASCII 码,自然不包含BOM,也不会出这样的错误;xigang制作的WordPress中文版在WordPress中文论坛有下,我去下载了 WordPress 2.0.4和2.0.3这两个,检查了一下,没有问题;点点游的WordPress 2.0.4中文版里,wp-config-sample.php文件用的是GB2312编码和DOS行尾符,GOD!不过这样也好,如果有人用记事本修改了这个文件,DOS行尾符不会造成编辑问题,GB2312编码不会造成BOM的问题


cookie用法
关于删除cookie的说明开始-----

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )

要删除cookie需要确保它的失效期是在过去,才能触发浏览器的删除机制。

下面的例子说明了如何删除刚才设置的cookie:
<?php
//将过期时间设为一小时前www.3ppt.com
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>


-----关于删除cookie的说明结束-----

删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这也是几乎所有php程序员都会这么做。

后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试
了一下:
setcookie("testcookie", '');
print_r($_COOKIE);


结果果然是整个$_COOKIE数组都是空的,而非仅仅$_COOKIE['testcookie']为空。于是用winsock抓包,观察返回的 http头,发现http头竟然是“Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT”,这说明“setcookie("testcookie", '');”的的确确是将testcookie这个cookie直接删除,而关于这种情况在php手册中完全没有说明。
分享到:
评论

相关推荐

    safari,opera嵌入iframe页面cookie读取问题解决方法

    在现代网络开发中,跨域通信和数据共享是常见的需求,而`iframe`元素常用于实现这样的功能。然而,由于浏览器的安全策略,特别是对于第三方cookie的处理,开发者可能会遇到在特定浏览器如Safari、Opera以及某些使用...

    php session登录验证实例与 cookie登录验证实例

    在PHP开发中,用户身份验证是至关重要的,它确保了只有授权用户才能访问特定的受保护资源。在PHP中,有两种常见的用户验证方法:session和cookie。这两种方法各有优缺点,选择哪种通常取决于应用场景和安全需求。...

    PHP setcookie设置Cookie用法(及设置无效的问题)

    在PHP中,setcookie函数用于在用户的浏览器中设置一个cookie。Cookie是一种在服务器端创建并通过HTTP...在开发过程中,合理设置PHP的错误报告级别,保持对Headers已经发送这类常见错误的警惕,是避免此类问题的关键。

    PHP实现cookie跨域session共享的方法分析

    在Web开发中,PHP作为服务器端脚本语言,经常用于处理客户端与服务器之间的交互,其中Cookie和Session是常见的用户状态管理工具。本文将深入探讨如何使用PHP实现Cookie跨域和Session共享,以及处理相关问题的方法。 ...

    PHP实例开发源码-小爬虫php留言板.zip

    PHP留言板是Web开发中常见的练习项目,用于展示动态内容的处理和用户交互。它通常由以下组件组成: 1. **前端界面**:HTML和CSS用于创建用户友好的表单,用户可以输入留言内容并提交。可能还包含JavaScript以进行...

    PHP实例开发源码—荔枝个人发卡系统PHP源码.zip

    6. **session和cookie**:用于跟踪用户状态和保持登录信息,session和cookie在Web应用中常见。PHP提供了内置的session和cookie处理函数,如session_start()、$_SESSION数组和setcookie()。 7. **支付接口集成**:...

    Php安全新闻早8点

    - **结论:** 虽然ASP风格标签提供了一定程度的便利性,但在现代PHP开发中并不推荐使用,主要是因为它降低了代码的可读性和维护性,并且可能会导致安全问题。建议始终使用PHP的标准标签。 #### 三、Cookie操作与...

    深入理解PHP中的Session和Cookie

    在PHP编程中,Session和Cookie是两种常见的用户状态管理机制,它们用来跟踪用户在网站上的活动,以便在多个页面间保持信息。理解这两者的工作原理和区别对于开发动态Web应用程序至关重要。 Cookie是一种客户端存储...

    PHP magento后台无法登录问题解决方法

    Magento是一款强大的开源电子商务平台,基于PHP开发,为企业级电商网站提供了丰富的功能和高度的可定制性。然而,如同任何复杂的软件系统,Magento也可能遇到各种问题,其中之一就是后台无法登录。本文将详细介绍两...

    PHP实例开发源码-苹果树 JSP 留言板(A).zip

    PHP与JSP是两种常用的服务器端脚本语言,它们在Web应用程序开发中扮演着重要角色。PHP(Hypertext Preprocessor)以其易学易用和跨平台特性而广受欢迎,而JSP(JavaServer Pages)则基于强大的Java语言,提供了更...

    基于xammp的php+mysql学生成绩录入系统网页

    遇到错误是常见的,这需要开发者具备调试和解决问题的能力。通过理解错误信息并修改代码,最终成功地创建了一个能够运行的成绩录入系统。这体现了学习编程过程中的实践和迭代,以及解决问题的关键技能。 【标签】:...

    php_user_management_tutorial_web_development.rar_php_php user_ph

    这将有助于提升你的PHP开发技能,为未来更复杂的Web项目打下坚实的基础。在实践中,你可以参考现有的开源框架(如Laravel、Symfony等)来简化开发流程,同时学习最佳实践,提高开发效率和代码质量。

    PHP程序设计-3期(KC016) PHP高级应用-过滤函数3-常见问题.docx

    在PHP程序设计中,过滤函数是处理数据输入和验证的重要工具,特别是在PHP的高级应用中。...在实际开发中,结合良好的编程实践,如始终验证用户输入,可以进一步提高代码质量并防止潜在的安全风险。

    使用HTML CSS PHP mySQL JavaScript 开发购买水果的网络商城系统源码

    在开发一个基于HTML、CSS、PHP、MySQL和JavaScript的在线水果购物商城系统时,涉及到的知识点广泛且深入。以下是对这些技术如何协同工作的详细说明: 首先,HTML(HyperText Markup Language)是网页的基础结构,...

    php切换地区php切换地区php切换地区php切换地区

    在PHP开发中,实现“地区切换”功能是一项常见的需求,特别是在构建多语言或跨国网站时。这个功能允许用户根据自己的地理位置或个人偏好选择不同的地区设置,如语言、货币、税率等。以下是一些关于如何在PHP中实现...

    php + mysql 简易的注册验证

    5. 错误处理:在所有步骤中,都需要考虑错误处理,例如输入无效、数据库连接失败等。良好的错误处理能提供友好的用户体验,并有助于调试。 6. 安全措施:除了密码加密,还要考虑其他安全措施,如防止跨站脚本攻击...

    session和cookies的定义用法

    在Web开发中,会话管理是非常关键的一环,它允许我们在用户浏览网站期间保留他们的状态信息。常见的会话存储机制有两种:Cookie和Session,两者都用于在多个Web页面间传递数据,但存储位置和安全性有所不同。 **...

    基于PHP的HYBBSPHP论坛源码.zip

    【标题】"基于PHP的HYBBSPHP论坛源码.zip" 涉及的主要知识点是PHP编程语言在构建BBS(Bulletin Board System)论坛系统中的应用。PHP是一种广泛使用的开源服务器端脚本...这对于提升PHP开发技能和实践经验非常有帮助。

    php解决和避免form表单重复提交的几种方法

    在PHP开发中,确保表单数据的一致性和避免重复提交是一个重要的问题,因为这可能导致数据库中的数据冗余,甚至可能引发安全风险。以下是一些常用的防止表单重复提交的方法: 1. **JavaScript禁用提交按钮**: 当...

    解析php通过cookies获取远程网页的指定代码

    `php中使用cookie来保存用户登录信息的实现代码`和`PHPCURL获取cookies模拟登录的方法`展示了如何利用Cookies实现用户登录状态的持久化,并通过cURL库进行模拟登录,这在开发需要用户认证的应用程序时非常常见。...

Global site tag (gtag.js) - Google Analytics