<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.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://www.jackxiang.com/post//</link>
<title><![CDATA[【转】php session原理，值得品味学习！]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 05 Feb 2009 11:16:12 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	众所周知，http协议是一个无状态协议，简单来说就是，web服务器是不知道现在连接上来的人到底是哪个人，为了满足选择性发送信息的需求，在http的基础上做了很多扩展来达到这个目的，如数字签名、cookie、session等。<br/>web服务器或者web程序如何能够知道现在连接上来的是谁？要解决这个问题，首先需要在服务器端和客户端建立一一对应关系，下边我通过抓取http的内容来说明这种对应关系是如何建立的。<br/>我使用的是一个叫做httplook的http包嗅探工具，然后在本地web服务器的根目录下建立一个叫test.php的文件，地址是：http://localhost/test.php，一切就绪以后我通过浏览器反复打开这个页面。<br/><br/><br/><br/><br/><div class="code">&lt;?php<br/><br/>session_start();<br/><br/>if (isset($_SESSION&#91;&#039;test_sess&#039;&#93;))&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION&#91;&#039;test_sess&#039;&#93;++;<br/><br/>&#125;else&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; $_SESSION&#91;&#039;test_sess&#039;&#93; = 0;<br/><br/>&#125;<br/><br/>echo $_SESSION&#91;&#039;test_sess&#039;&#93;;<br/><br/>?&gt;;</div><br/><br/><br/>以下是前两次向服务器发出的信息及服务器返回的信息<br/>引用：原帖由 &quot;第一次请求服务器&quot; 发表：<br/><br/>GET /test.php HTTP/1.1<br/>Accept: */*<br/>Referer: http://localhost/<br/>Accept-Language: zh-cn<br/>Accept-Encoding: gzip, deflate<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)<br/>Host: localhost<br/>Connection: Keep-Alive<br/><br/><br/>引用：原帖由 &quot;服务器第一次返回&quot; 发表：<br/><br/>HTTP/1.1 200 OK<br/>Date: Fri, 26 Aug 2005 07:44:22 GMT<br/>Server: Apache/2.0.54 (Win32) SVN/1.2.1 PHP/5.0.4 DAV/2<br/>X-Powered-By: PHP/5.0.4<br/>Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/<br/>Expires: Thu, 19 Nov 1981 08:52:00 GMT<br/>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br/>Pragma: no-cache<br/>Content-Length: 1<br/>Keep-Alive: timeout=15, max=99<br/>Connection: Keep-Alive<br/>Content-Type: text/html; charset=utf-8<br/>Content-Language: Off<br/><br/><br/>引用：原帖由 &quot;第二次请求服务器&quot; 发表：<br/><br/>GET /test.php HTTP/1.1<br/>Accept: */*<br/>Referer: http://localhost/<br/>Accept-Language: zh-cn<br/>Accept-Encoding: gzip, deflate<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)<br/>Host: localhost<br/>Connection: Keep-Alive<br/>Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3<br/><br/><br/>引用：原帖由 &quot;服务器第二次返回&quot; 发表：<br/><br/>HTTP/1.1 200 OK<br/>Date: Fri, 26 Aug 2005 07:44:23 GMT<br/>Server: Apache/2.0.54 (Win32) SVN/1.2.1 PHP/5.0.4 DAV/2<br/>X-Powered-By: PHP/5.0.4<br/>Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/<br/>Expires: Thu, 19 Nov 1981 08:52:00 GMT<br/>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br/>Pragma: no-cache<br/>Content-Length: 1<br/>Keep-Alive: timeout=15, max=98<br/>Connection: Keep-Alive<br/>Content-Type: text/html; charset=utf-8<br/>Content-Language: Off<br/><br/><br/><br/>仔细对比这些输出，第二次请求比第一次请求多出来的就是：<br/>Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3<br/>这个header将会向服务器发送一个cookie信息，告诉服务器我有一个cookie，名字叫PHPSESSID，内容是bmmc3mfc94ncdr15ujitjogma3。<br/>这个cookie是怎么来的呢？看第一次服务器返回的信息里边有：<br/>Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/<br/>这是服务器向客户端浏览器写一个cookie，名字是PHPSESSID，值是bmmc3mfc94ncdr15ujitjogma3，这个值实际就是所谓的session_id。<br/>继续看第二次向服务器发出的请求，仍然向服务器发送了PHPSESSID这个cookie<br/><br/>可以得到以下结论：<br/>1、只要使用了session，就会通过cookie的方式向客户端浏览器发送session<br/>2、每次向服务器发出请求的时候，本地浏览器会把cookie附带在请求信息中<br/><br/>说到这里，服务器端和客户端如何通过session做到一一对应的答案就很清楚了，明白了这个道理，对于使用session有很大帮助，请细细体会。<br/><br/>深入学习：http://hi.baidu.com/xchinux/blog/item/428540a73c877793d0435838.html<br/><br/><br/>我的httpwatcheer情况：<br/>第一次：<br/>server：<br/>HTTP/1.1 200 OK<br/>Date: Thu, 05 Feb 2009 11:24:42 GMT<br/>Server: Apache/2.2.9 (APMServ) PHP/5.2.6<br/>X-Powered-By: PHP/5.2.6<br/>Set-Cookie: PHPSESSID=b6d43eeccc1c4682ce37be790386e15e; path=/<br/>Expires: Thu, 19 Nov 1981 08:52:00 GMT<br/>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br/>Pragma: no-cache<br/>Content-Length: 2<br/>Keep-Alive: timeout=5, max=100<br/>Connection: Keep-Alive<br/>Content-Type: text/html<br/><br/>0;<br/><br/>client get：<br/><br/>GET /5-5/session.php HTTP/1.1<br/>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<br/>Accept-Language: zh-cn<br/>Accept-Encoding: gzip, deflate<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; .NET CLR 2.0.50727; CIBA; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)<br/>Host: localhost<br/>Connection: Keep-Alive<br/><br/>刷新第二次：<br/>server：<br/><br/>HTTP/1.1 200 OK<br/>Date: Thu, 05 Feb 2009 11:26:22 GMT<br/>Server: Apache/2.2.9 (APMServ) PHP/5.2.6<br/>X-Powered-By: PHP/5.2.6<br/>Expires: Thu, 19 Nov 1981 08:52:00 GMT<br/>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br/>Pragma: no-cache<br/>Content-Length: 2<br/>Keep-Alive: timeout=5, max=100<br/>Connection: Keep-Alive<br/>Content-Type: text/html<br/><br/>1;<br/><br/>client get：<br/><br/>GET /5-5/session.php HTTP/1.1<br/>Accept: */*<br/>Accept-Language: zh-cn<br/>Accept-Encoding: gzip, deflate<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; .NET CLR 2.0.50727; CIBA; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)<br/>Host: localhost<br/>Connection: Keep-Alive<br/>Cookie: PHPSESSID=b6d43eeccc1c4682ce37be790386e15e<br/><br/>果然发现第一次server中包含：<br/>Set-Cookie: PHPSESSID=b6d43eeccc1c4682ce37be790386e15e; path=/&nbsp;&nbsp;设置cookie的！<br/>第二次的client get：<br/>出现：Cookie: PHPSESSID=b6d43eeccc1c4682ce37be790386e15e<br/><br/>得证！！！<br/><br/><br/><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.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.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>