忙了半天,才明白COOKIE失效是因为没有urlencode

rek.me已经做好几天了,使用起来感觉还不错。随便看到哪个网站好的,直接在地址栏http前面加上rek.me/就可以生成一个微缩过的地址,非常方便,以致于我都有点不想做工具栏按钮了。
今天准备为rek.me加入owner信息,这样网址微缩就可以变成网络书签了。考虑到操作简便性的要求,就直接在第一次使用的时候生成一个md5的uuid,然后setcookie一年,这样甭管多会上来都不用登录。而以后加入OpenID支持也就把OpenID URL和uuid对应一下完事。哪知道coding完毕之后,根本就用不了,随便换个网址,uuid就被重设。用Firebug又可以看到response header中正确的cookie设置,怪哉~~
于是慢慢排查,发现rek一个网址之后不关标签,只改个把字符再发请求,cookie就会发回给服务器。但是如果新开一个网站,然后再rek它,cookie就会被重设了。起初我以为是Firefox的问题,可换了Google Chrome也还是这样,完全搞不懂为什么——浏览器应该会跨页面传递COOKIE的啊。
之后偶然发现,不同网站的址在同一标签中也会导致cookie重设,于是恍然大悟。因为rek.me创建微缩网址的方式是使用http://rek.me/http://guangxin.name这样的地址,会导致浏览器认为请求的域名是guangxin.name,与rek.me是不同的域,所以rek.me下的cookie不予发送。
一个解决方法是urlencode,如果请求是http://rek.me/http%3A%2F%2Fguangxin.name这样的地址,浏览器就会认为后面的http…是URL的一部分,域名还是rek.me,cookie就能正确发送了。不过很难要求用户自己手动完成urlencode操作,看来直接在地址栏rek.me/的方法不好用了,还是得单独用Javascript做一个Short&Bookmark的按钮。

也許你還會喜歡

2 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Time limit is exhausted. Please reload CAPTCHA.