<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post/1681/</link>
<title><![CDATA[[转]PHP删除cookie的一个小秘密]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 27 Mar 2009 05:58:51 +0000</pubDate> 
<guid>http://jackxiang.com/post/1681/</guid> 
<description>
<![CDATA[ 
	首先我们看一下php手册中关于删除cookie的说明<br/><br/>------以下引用php手册内容--------------<br/><br/><div class="code">bool setcookie ( string name &#91;, string value &#91;, int expire &#91;, string path &#91;, string domain &#91;, bool secure&#93;&#93;&#93;&#93;&#93; )</div><br/><br/>要删除 cookie 需要确保它的失效期是在过去，才能触发浏览器的删除机制。<br/>下面的例子说明了如何删除刚才设置的 cookie： 例子 2. setcookie() 删除<br/>例子<br/><br/>// 将过期时间设为一小时前<br/><br/><div class="code">setcookie(&quot;TestCookie&quot;, &quot;&quot;, time() - 3600);<br/>setcookie(&quot;TestCookie&quot;, &quot;&quot;, time() - 3600, &quot;/~rasmus/&quot;, &quot;.utoronto.ca&quot;, 1); </div>----------------引用结束--------------------------<br/><br/>　删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前，这<br/>也是几乎所有php程序员都会这么做。<br/><br/>&nbsp;&nbsp;后来一个初接触php的朋友告诉我，他在程序中本想把一个cookie的值设置为<br/>空，结果导致这个cookie直接被删除。我当时的第一反应是不相信，于是测试<br/>了一下<br/><br/><div class="code">setcookie(&quot;testcookie&quot;, &#039;&#039;);<br/>print_r($_COOKIE);</div>结果果然是整个$_COOKIE数组都是空的，而非仅仅$_COOKIE['testcookie']为<br/>空.于是用winsock抓包，观察返回的http头，发现http头竟然是<br/><br/><div class="code">Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT</div><br/><br/>这说明setcookie("testcookie", '');的的确确是将testcookie这个cookie直<br/>接删除.而关于这种情况在php手册中完全没有说明.<br/><br/>最后阅读php源码，终于发现真相(这就是开源的好处了，有什么不清楚的内幕<br/>直接查源码)<br/><br/>以下代码可以在php5.20的linux源码包中ext/standard/head.c第99行附近找到.<br/><br/><br/><div class="code">if (value &amp;&amp; value_len == 0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/* <br/>&nbsp;&nbsp;&nbsp;&nbsp; * MSIE doesn&#039;t delete a cookie when you set it to a null value<br/>&nbsp;&nbsp;&nbsp;&nbsp; * so in order to force cookies to be deleted, even on MSIE, we<br/>&nbsp;&nbsp;&nbsp;&nbsp; * pick an expiry date 1 year and 1 second in the past<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;time_t t = time(NULL) - 31536001;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dt = php_format_date(&quot;D, d-M-Y H:i:s T&quot;, sizeof(&quot;D, d-M-Y H:i:s T&quot;)-1, t, 0 TSRMLS_CC);<br/>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(cookie, &quot;Set-Cookie: %s=deleted; expires=%s&quot;, name, dt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;efree(dt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(cookie, &quot;Set-Cookie: %s=%s&quot;, name, value ? encoded_value : &quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (expires &gt; 0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcat(cookie, &quot;; expires=&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;dt = php_format_date(&quot;D, d-M-Y H:i:s T&quot;, sizeof(&quot;D, d-M-Y H:i:s T&quot;)-1, expires, 0 TSRMLS_CC);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcat(cookie, dt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;efree(dt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;</div><br/><br/>　源码中清清楚楚的显示,if (value && value_len == 0) ，当value_len为0<br/>时<br/>sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);<br/>会发送删除cookie的http头给浏览器.<br/><br/>　最后我们可以得出结论,在php中使用<br/>setcookie($cookiename, '');或者 setcookie($cookiename, NULL);<br/>都会删除cookie,当然这些手册中并没有。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post/1681/#blogcomment51350</link>
<title><![CDATA[[评论] [转]PHP删除cookie的一个小秘密]]></title> 
<author>stefyang &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 28 Mar 2009 14:40:46 +0000</pubDate> 
<guid>http://jackxiang.com/post/1681/#blogcomment51350</guid> 
<description>
<![CDATA[ 
	我也想有空读读php的源代码<br/>不知道如何开始<br/>有没有什么经验可推荐的
]]>
</description>
</item><item>
<link>http://jackxiang.com/post/1681/#blogcomment51351</link>
<title><![CDATA[[评论] [转]PHP删除cookie的一个小秘密]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Mon, 30 Mar 2009 02:28:42 +0000</pubDate> 
<guid>http://jackxiang.com/post/1681/#blogcomment51351</guid> 
<description>
<![CDATA[ 
	呵呵，用SourceInsight看吧，很不错的。
]]>
</description>
</item>
</channel>
</rss>