发现一个很奇怪的现象
时间:2008-04-03
来源:互联网
作者: liexusong 发布时间: 2008-04-03
作者: carche 发布时间: 2008-04-03
作者: liexusong 发布时间: 2008-04-03
PHP代码:
<?php
session_start();
$_SESSION['name'] = 'myname';
?>
PHP代码:
<?php
session_start();
echo $_SESSION['name'];
?>
作者: liexusong 发布时间: 2008-04-03
可能:
1.IE的缓存!
2.IE保存当前在试用的数据!一如你浏览本页,然后清除历史记录!关闭浏览器再打开,这个页面的地址没有被删除!
作者: thaiki 发布时间: 2008-04-03
其次,在IE环境下,你上述程序的cookie信息是保存在内存里的,不借助特殊的工具你是删不掉的,IE自带的删除cookie工具只是删除文件形式的cookie,不删除内存里的cookie。
最后,firefox自带的删除cookie工具是真正将内存的cookie信息删除,当再次发送请求时,由于没有发送cookie保存的sessionid值,当然不会显示myname;如果你手工构造一个cookie值并随请求信息发送出去,不管是ie还是firefox,还是可以得到myname。
如果不指明session信息的存货期限,服务器按php.ini指定的时间保存session信息,过了这个时间自动删除。
作者: carche 发布时间: 2008-04-03
作者: liexusong 发布时间: 2008-04-03


作者: luzhou 发布时间: 2008-04-04
session.php
PHP代码:
session_start();$_SESSION['name'] = 'myname';
//显示服务器发送给浏览器的信息
$response = apache_response_headers( );
foreach ( $response as $key=>$val) {
echo "$key : $val ";
}
?>
代码:
X-Powered-By : PHP/5.2.5Set-Cookie : PHPSESSID=fb59af19cba8de4f1ad4de0aa577f0d7; path=/
Expires : Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control : no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma : no-cache
getsession.php
PHP代码:
session_start();echo $_SESSION['name'];
//显示来自来自浏览器的请求信息
$request = apache_request_headers( );
foreach ( $request as $key=>$val) {
echo "$key : $val
";
}
?>
代码:
mynameHost : localhost
User-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b4) Gecko/2008030317 Firefox/3.0b4
Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language : zh-cn,zh;q=0.5
Accept-Encoding : gzip,deflate
Accept-Charset : gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive : 300
Connection : keep-alive
Cookie : PHPSESSID=fb59af19cba8de4f1ad4de0aa577f0d7
这时,将cookie信息删除,刷新页面,如楼主所言,firefox下,看不到myname的,输出如下:
代码:
Host : localhostUser-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b4) Gecko/2008030317 Firefox/3.0b4
Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language : zh-cn,zh;q=0.5
Accept-Encoding : gzip,deflate
Accept-Charset : gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive : 300
Connection : keep-alive
Cache-Control : max-age=0
send.php
PHP代码:
<?php
//手工构造一个请求头,发送我们前面得到的cookie信息
$header = "GET /getsession.php HTTP/1.1\r\n";
$header .= "Host : localhost\r\n";
$header .= "Cookie : PHPSESSID=fb59af19cba8de4f1ad4de0aa577f0d7\r\n";
$header .= "Connection : Close\r\n\r\n";
$fp = fsockopen( "localhost", 80);
if ( fwrite( $fp, $header) ) {
while ( $data = fgets($fp) ) {
echo trim($data)."<br>";
}
}
代码:
HTTP/1.1 200 OKDate: Sat, 05 Apr 2008 05:24:03 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 134
Connection: close
Content-Type: text/html
myname
我们自己构造的请求头:
Host : localhost
Cookie : PHPSESSID=fb59af19cba8de4f1ad4de0aa577f0d7
Connection : Close
客户端的cookie信息是删除了,但服务器端并没有删除session信息,只要客户端发送对应session的cookie值,服务器仍会返回session信息。
再说说IE和FIreFox,如果没有指明Cookie的有效期,Cookie的默认有效期就是进程范围内的,也就是Cookie信息保存在内存里。只要浏览器进程不关闭,Cookie一直有效,每次访问同一个网站,都会发送相应的Cookie信息。
具体到IE,没有自带工具删除内存的cookie,只要进程不关闭,就一直发送cookie信息,这是为什么能看到myname;
FireFox的自带工具是能删除内存Cookie的,只要删除了cookie,FireFox就不会再发送cookie信息,所以你看不到myname。
[ 本帖最后由 carche 于 2008-4-5 14:00 编辑 ]
作者: carche 发布时间: 2008-04-05
作者: laopi 发布时间: 2008-04-08
作者: liexusong 发布时间: 2008-04-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28