<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[php session使用初探 ]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 31 Oct 2006 02:00:04 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	　　经过实验发现，PHP4的session只对当前打开的浏览器窗口有效（至少在W2K下的IE5和NS6中是这样）。<br/><br/>　　实验步骤：<br/><br/>　　首先我们来建立两个文件。<br/><br/>test1.php <br/><br/>session_start(); <br/><br/>session_register(&quot;count&quot;); <br/><br/>echo $count=0; <br/><br/>?&gt; <br/><br/>test2.php <br/><br/>session_start(); <br/><br/>echo $count++; <br/><br/>?&gt; <br/><br/>　　然后为了避免不必要的影响我们清空浏览器的cache，打开两个浏览器窗口，在第二个浏览器的窗口中执行test1.php，这时我们应该看到浏览器中显示的值是0。继续在第二个浏览器的窗口中执行test2.php，并不断的刷新它，我们就会看到浏览器中的数值在不断的递增，这说明我们的session是起作用的。我们继续看看其他的情况，先在第一个浏览器的窗口中执行test2.php，没有显示继续刷新，仍没有显示。我们再打开第三个浏览器窗口并在其中执行test2.php，也是没 <br/><br/>有显示，这说明session不能跨窗口运行。<br/><br/>　　那么怎么才能让session可以跨窗口执行呢？我们一起来继续我们的实验。<br/><br/>　　首先，我们来看看使用cookie的情况，同样建立两个文件。<br/><br/>test3.php <br/><br/>setcookie(&quot;cookie&quot;,&quot;This is a cookie.&quot;,time()+3600,&quot;/&quot;,&quot;www.md.hl.cn&quot;); <br/><br/>?&gt; <br/><br/>test4.php <br/><br/>echo $cookie; <br/><br/>?&gt; <br/><br/>然后我们仍然利用刚才打开的三个浏览器的窗口，先在第二个窗口中执行test3.php。没有任何显示，然后我们在三个窗口中分别执行test4.php，都会显示This is a cookie.这说明使用cookie是可以跨窗口执行的。<br/><br/>　　我们怎么才能让session跨窗口执行呢？其实session也在cookie中保存了session_id(不过session也可以不使用cookie，但这不在本文的讨论范围)。这个cookie的名字与你在php.ini中的session.name的设置有关，缺省时叫&quot;PHPSESSID&quot;。但在IE的cache中却找不到。你可以通过echo $HTTP_COOKIE_VARS[&quot;PHPSESSID&quot;]来查看它的值，当然也可以通过setcookie()来设置它。PHP4中可以使用session_set_cookie_params()和session_get_cookie_params()来设置和查看session的cookie设置。但我试了一下不起任何作用，session仍然是关闭浏览器窗口就失效，仍然不能跨窗口运行。我想也许是我调用的方法不对，麻烦那位高手知道给指点一下。<br/><br/>　　最后，我们来继续完成我们的实验。这次要修改我们的文件test1.php<br/><br/>test1.php <br/><br/>session_start(); <br/><br/>session_register(&quot;count&quot;); <br/><br/>setcookie(&quot;PHPSESSID&quot;,session_id(),time()+3600,&quot;/&quot;,&quot;www.md.hl.cn&quot;); <br/><br/>echo $count=0; <br/><br/>?&gt;<br/><br/>　　然后我们再来重复我们的实验一，哈哈，这次session可以跨窗口使用了吧，并且关闭浏览器session也不会马上失效，上例中的session应该是1小时后失效，但在做实验二时，我吧3600改成120，查看IE的cache，此cookie是2分钟后到期，但不停的刷新test4.php发现实际$cookie这个变量存在的时间却只有大约6秒中，不知道到底是怎么回事。:(麻烦那位高手知道给指点一下。<br/><br/>　　后记：这篇文章的所有程序是在Solaris 2.6，PHP 4.0.0，Apache 1.3.12下测试并通过的。 <br/><br/>但写完这篇文章以后我又在Windows 2000 Advanced Server，PHP 4.0.1pl2，IIS 5.0测试了一 <br/><br/>遍，发现PHP 4.0.1pl2中的session可以跨窗口运行，而且也可以用用session_set_cooie_params()设置session cookie的失效时间。所以我想上面的问题也许只是PHP 4.0.0的一个bug， 唉，又要升级服务器的软件了。:( <br/><br/>Tags - <a href="http://www.dzhope.com/tags/session/" rel="tag">session</a> , <a href="http://www.dzhope.com/tags/php/" rel="tag">php</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] php session使用初探 ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>