|
众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
<?php
session_start();
if(isset(
众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
___FCKpd___0
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由"第一次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
引用:原帖由"服务器第一次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:22GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=99
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
引用:原帖由"第二次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由"服务器第二次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:23GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=98
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
3. 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。
SESSION['test_sess'])){
众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
___FCKpd___0
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由"第一次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
引用:原帖由"服务器第一次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:22GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=99
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
引用:原帖由"第二次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由"服务器第二次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:23GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=98
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
3. 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。
SESSION['test_sess']++;
}else{
众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
___FCKpd___0
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由"第一次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
引用:原帖由"服务器第一次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:22GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=99
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
引用:原帖由"第二次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由"服务器第二次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:23GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=98
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
3. 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。
SESSION['test_sess']=0;
}
echo
众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求,在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
___FCKpd___0
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由"第一次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
引用:原帖由"服务器第一次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:22GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=99
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
引用:原帖由"第二次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由"服务器第二次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:23GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=98
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
3. 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。
SESSION['test_sess'];
?>;
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由"第一次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
引用:原帖由"服务器第一次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:22GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=99
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
引用:原帖由"第二次请求服务器"发表:
GET/test.phpHTTP/1.1
Accept:*/*
Referer:http://localhost/
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;Maxthon;.NETCLR1.1.4322)
Host:localhost
Connection:Keep-Alive
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由"服务器第二次返回"发表:
HTTP/1.1200OK
Date:Fri,26Aug200507:44:23GMT
Server:Apache/2.0.54(Win32)SVN/1.2.1PHP/5.0.4DAV/2
X-Powered-By:PHP/5.0.4
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
Expires:Thu,19Nov198108:52:00GMT
Cache-Control:no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma:no-cache
Content-Length:1
Keep-Alive:timeout=15,max=98
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Content-Language:Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie:PHPSESSID=bmmc3mfc94ncdr15ujitjogma3;path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
3. 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。 |
|