php在iis5下使用setcookie + header('Location')导致cookie失效的bug

post by 朦朧中的罪惡 / 2009-9-5 19:51 Saturday 疑难杂症

那多记忆 2009-9-4 21:49:10
今天遇到一个奇怪的问题 emlog在一个 iis5 php4.4.6 的环境下,登录的时候我们是先写cookie 然后 header location到首页,但是在这个环境下只要有 header location 服务器就不发送cookie了。。去掉header location 就ok

我上网查找了一下,这是iis5的一个bug,其他服务器和II7没有这个问题

下面是我查到相关资料
微软官方对于这个bug的说明
http://support.microsoft.com/kb/q176113/
另外在php在线手册的评论中也有一位网友发现了这个问题
http://cn.php.net/manual/en/function.setcookie.php#50957

评论内容(原文 + 翻译):
setcookie + header Location + IIS 5 = Trouble

It took me a long time to figure out what was causing a missing cookie in one system while it worked perfectly in another...
这个让我用了很长的时间去查出cookie在一个系统上丢失却在其他系统上正常原因

See this one: http://support.microsoft.com/kb/q176113/

In short, this WILL NEVER WORK IN IIS 5:
简单的说,下面的代码不能在iis5上成功运行
<?php
header
("Pragma: no-cache");
header('Location: http://www.example.com/');
setcookie('AA','1',0,'/');
setcookie('BB','2',time() + 24 * 3600,'/');
?>

You will ONLY get the Location Header, everything else will be "cut out" by IIS 5 CGI implementation.
你只能得到
Location Header,其他的东西全部都在iis5的CGI执行中被剪掉了
Solutions:
解决方案
1- Migrate to Apache/IIS6/Whatever
迁移到Apche IIS6 或者其他的平台上
2- Use a Non Parsed Header Script (nph-*.php)
使用不处理头部的脚本文件
3- Try with header('Refresh: 0; $URL');
尝试发送这样的头来实现页面跳转
header('Refresh: 0; $URL');

I hope this helps somebody not to spend hours knocking his/her head.

我希望这些能帮助某些人不用浪费很多时间来敲头(笑)

标签: php 原创

评论(2) 引用(0) 浏览(706)

php仿银行电子口令卡生成程序

post by 朦朧中的罪惡 / 2009-9-4 19:08 Friday PHP

用php写了一个银行口令卡生成程序,可以生成类似银行口令卡的图片或者表格。

工商银行的电子口令卡

 

我自己的(每次刷新就会重新生成一个图片):

在线演示DEMO:

生成html表格

生成png图片

背景图片可自行替换,数字的范围,表格行数格数全部可调,参见附件源代码。

本程序无版权,可随意传播

附件下载:
card.zip 14.02KB

标签: php 原创

评论(1) 引用(0) 浏览(563)

Vim学习笔记[坚持更新]

post by 朦朧中的罪惡 / 2009-8-31 21:05 Monday 软件应用

我的所有学习Vim的笔记,有新知识就更新

阅读全文>>

标签: Vim

评论(0) 引用(0) 浏览(525)

iis7以fastcgi配置php时出现FastCGI进程意外退出问题解决

post by 朦朧中的罪惡 / 2009-8-29 21:57 Saturday 疑难杂症

很多人在配置iis7+fastcgi+php时出现了 500错误FastCGI进程意外退出同时php-cgi.exe进程崩溃。

如图

点击查看原图

点击查看原图

这个问题一般都是php配置出了问题导致的。

我的解决方法一般都是先将php程序目录放进系统path变量中,这样可以在不用iis的情况下使用php -v的命令来检查php的配置情况。

例如:php.ini中我把extension_dir属性的路径写错了。在命令行中输入 php -v就会有以下显示(点击放大)

点击查看原图

php不能加载扩展库文件,当然会报错了。

修改完成后再看(点击放大)这是就没有问题了。

点击查看原图

此时再重起iis,问题即可解决。

标签: 原创 环境配置 iis7

评论(0) 引用(0) 浏览(1482)

IIS7配置PHP5.3问题解决笔记

post by 朦朧中的罪惡 / 2009-8-27 18:38 Thursday 疑难杂症

选择PHP版本:

php 5.3的Windows版本要去专用的站点 http://windows.php.net/download/ 下载

选择版本时要参照官方的提示去做:

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

如果你在Apache1或者Apache2跑php,那么你需要下载VC6版本的php
If you are using PHP with IIS you should use the VC9 versions of PHP
如果你在IIS下面跑php那么需要安装VC9版本的PHP
VC6 Versions are compiled with the legacy Visual Studio 6 compiler
VC6版本可以由老版本的Visual Studio 6编译
VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed
VC9版本由Visual Studio 2008编译提高了效率和稳定性。VC9版本需要你有Microsoft 2008 C++ Runtime(32位或者64位)
Do NOT use VC9 version with apache.org binaries

别用Apache去跑VC9版本的PHP

阅读全文>>

标签: 原创 软件应用 环境配置 iis7

评论(0) 引用(0) 浏览(2296)

新版等宽字体Monaco

post by 朦朧中的罪惡 / 2009-8-26 17:10 Wednesday 软件应用

很早之前我写过一篇也谈等宽字体,在里面谈论过很多编程字体,其中MAC下的monaco字体对我来说间距过大被我pass掉了.目前我从Mac中重新转换出了一套Monaco字体,这套新字体行间距明显小了许多,代码的可读性也提高了.

我自己转换后的新版monaco,注意在下面代码由于行间距小一些的比上面的多出了8行代码,同时中文也显示正常(点击放大)

点击查看原图

阅读全文>>

附件下载:
Monaco.zip 171.01KB

标签: 原创 享受编程

评论(0) 引用(0) 浏览(953)

PHP实现各种排序算法

post by 朦朧中的罪惡 / 2009-8-26 15:25 Wednesday PHP

php实现冒泡排序、交换法排序、选择法排序、插入法排序、快速排序的程序实现。

源码 函数 + 注释

阅读全文>>

附件下载:
sort.zip 1.09KB

标签: php 算法

评论(0) 引用(0) 浏览(440)

eclipse插件安装的三种方法

post by 朦朧中的罪惡 / 2009-8-21 10:21 Friday

一、使用eclipse的SoftwareUpdates / Find and install... search for new features... 输入软件安装地址进行安装

二、下载插件文件,将其解压缩到eclpise对应的目录中。重起eclipse,如果插件不能升效,则将eclipse\configuration\org.eclipse.update目录删除后再启动eclipse.

三、links文件方式。在eclipse目录中新建links目录以jode为例, 创建插件存放目录: eclipsePlugins\jode\eclipse 将plugins解压到eclipse目录中,这样eclipse中中就有了二个插件目录features and plugins. 在links目录中建立一个以link为扩展名的文本文件如jode.link,内容如下path=disk:/eclipsePlugs/jode 即可.重启eclipse插件就会安装完成.

 

 

标签: eclipse

评论(0) 引用(0) 浏览(374)

我正在使用的FireFox扩展

post by 朦朧中的罪惡 / 2009-8-17 19:38 Monday 软件应用

IE Tab

解决某些IE only的网站用

https://addons.mozilla.org/zh-CN/firefox/addon/1419

Quick Drag

实现超级拖拽功能

https://addons.mozilla.org/zh-CN/firefox/addon/6912

Hide Menu Bar

隐藏掉菜单栏增加浏览空间

https://addons.mozilla.org/zh-CN/firefox/addon/4762

Fire Bug

搞Web开发必备利器

https://addons.mozilla.org/zh-CN/firefox/addon/1843

Fire Cookie

Web开发与Hack必备

https://addons.mozilla.org/zh-CN/firefox/addon/6683

Fire Gestures

鼠标手势

https://addons.mozilla.org/zh-CN/firefox/addon/6366

Hide Caption

将菜单栏去掉,增加页面可视空间(和Hide Menu Bar 只能各选其一)

https://addons.mozilla.org/en-US/firefox/addon/9256

标签: 原创 FireFox

评论(0) 引用(0) 浏览(296)

一个很囧的PHP SESSION 失效的问题

post by 朦朧中的罪惡 / 2009-8-13 18:44 Thursday 疑难杂症

今天emlog群里面有用户说有个博客不能留言,正确填写了验证码之后emlog提示验证码失效.要到网址自己尝试了一下,果然如此.

emlog的验证码程序验证逻辑是绝对没有问题的,那么导致这个情况的只可能是该服务器PHP的Session出现了问题.

首先检查该服务器的环境,http抓包显示是 IIS 6.0 + PHP 5.2.0 RC4

点击查看原图

看到PHP 5.2.0 RC,我首先考虑是不是这个版本的PHP存在Bug.去PHP官网查询后发现该版本不存在Session的Bug.

既然不是PHP的问题那么再检查Cookie的状态.

用FireBug查看该站点的Cookie信息,看到PHP的Session所属的Cookie存在并且有值.没有问题.

这时我看到了该Cookie的Path属性,当场就囧掉了...

点击查看原图

为啥囧,Cookie的Path居然被设为了C:\Windows\temp.

很显然这个服务器的管理员把php.ini中的Session配置属性session.cookie_pathsession.save_path给了弄混了,把php临时文件的路径赋给了session.cookie_path,而这样的结果就是Cookie失效导致PHP无法获得SessionID.验证码自然就成了摆设了...

 

标签: php 原创

评论(2) 引用(0) 浏览(1070)