再次讨论关于CI无法设置cookie的问题
本帖最后由 阿亮 于 2012-3-23 21:02 编辑今天被CI无法设置cookie搞毛了,首先搜索到huboo82的帖子:http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=11229&extra=page%3D1&page=1但他最后发现是域名问题,我自己有两次碰到无法登录的问题,一次是测试win8的ie10,一次是fedora下的chrome。
这是我在chrome 的header:
HTTP/1.1 200 OK
Date: Sat, 17 Mar 2012 14:56:11 GMT
Server: Apache/2.2.9 (APMServ) mod_ssl/2.2.9 OpenSSL/0.9.8h PHP/5.2.6
X-Powered-By: PHP/5.2.6
Set-Cookie: xy_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22ef0505ca7df3751c8bb557883296ea2b%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%22192.168.1.102%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28X11%3B+Linux+i686%29+AppleWebKit%2F535.11+%28%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1331996171%3B%7D84746ba7192d90bc205b27ebb255be48; expires=Sat, 17-Mar-2012 16:56:11 GMT; path=/
Set-Cookie: xy_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22ef0505ca7df3751c8bb557883296ea2b%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%22192.168.1.102%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28X11%3B+Linux+i686%29+AppleWebKit%2F535.11+%28%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1331996171%3B%7D84746ba7192d90bc205b27ebb255be48; expires=Sat, 17-Mar-2012 16:56:11 GMT; path=/
Content-Length: 26
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
很明显CI把过期时间等等都放到了Set-Cookie 里面,不明白是怎么回事,我想header返回的信息还没经过浏览器渲染,不可能是浏览器的bug吧。可惜难以验证,因为我在fedora下换firefox,则没有此问题,不知道有朋友碰到同样问题吗。有碰到同样问题的朋友请把header贴过来看看。
///////////////////////
重新排版再看了一遍,貌似是因为“xy_session=”和“ expires=Sat,”中间没有换号的原因,但是有输出了“;”
莫非是换行的问题,不知道header的换行怎么控制。
- -我没说域名问题啊,我不是说是没有写过期时间导致不能设置的嘛…… 哦,帖子地址错了,今天找不到了,见谅。 本帖最后由 阿亮 于 2012-3-19 20:13 编辑
update:今天再次调试,看了看正常登录的header,没有换行,Set-Cookie以 path=/"结尾,不存在换行问题,
用js直接写cookies:
document.cookie="xy_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22ef0505ca7df3751c8bb557883296ea2b%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%22192.168.1.102%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28X11%3B+Linux+i686%29+AppleWebKit%2F535.11+%28%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1331996171%3B%7D84746ba7192d90bc205b27ebb255be48; expires=Sat, 17-Mar-2012 16:56:11 GMT; path=/"
能够设置成功,说明不是什么特殊字符不能写入cookies,为什么登录后的跳转就是没有cookies呢,
之前注意到header中有重复的两条Set-Cookie:
有难道是跟这个有关系?
直接换用我发布的 Session 类就解决了,不用这么纠结。。。。 老大,我用的就是session类。model的longin方法,比对匹配后:
$newdata = array(
'session_name'=> $loginID,
'Permissions' => $row->Permissions,
'username' => $row->username
);
$this->session->set_userdata($newdata);
return TRUE;
controller根据返回值redirect
阿亮 发表于 2012-3-19 20:09 static/image/common/back.gif
老大,我用的就是session类。model的longin方法,比对匹配后:
我说是我写的 Session 类,不是 CI 自带的。。。。
CI 的 Session 是 Cookie 实现的,而我写的是用的 PHP Session。 PHP 原生 Session 类库,可完全替代 CI 自己的 Session 类库 http://codeigniter.org.cn/forums/thread-4007-1-1.html
///
是这个吧,用一段时间试试看,
只是不支持写入数据库,也就不会比对是否修改session
用的是PHPSESSID,加密了的ID,具体内容应该是存在服务器内存中,即使修改ID,也应该不容易突破权限。
页:
[1]