用户
 找回密码
 入住 CI 中国社区
搜索
查看: 9346|回复: 7
收起左侧

[已解决] 再次讨论关于CI无法设置cookie的问题

[复制链接]
发表于 2012-3-17 23:04:46 | 显示全部楼层 |阅读模式
本帖最后由 阿亮 于 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:
  1. HTTP/1.1 200 OK
  2. Date: Sat, 17 Mar 2012 14:56:11 GMT
  3. Server: Apache/2.2.9 (APMServ) mod_ssl/2.2.9 OpenSSL/0.9.8h PHP/5.2.6
  4. X-Powered-By: PHP/5.2.6
  5. 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=/
  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=/
  7. Content-Length: 26
  8. Keep-Alive: timeout=5, max=100
  9. Connection: Keep-Alive
  10. Content-Type: text/html

复制代码



很明显CI把过期时间等等都放到了Set-Cookie 里面,不明白是怎么回事,我想header返回的信息还没经过浏览器渲染,不可能是浏览器的bug吧。可惜难以验证,因为我在fedora下换firefox,则没有此问题,不知道有朋友碰到同样问题吗。有碰到同样问题的朋友请把header贴过来看看。
///////////////////////
重新排版再看了一遍,貌似是因为“xy_session=”和“ expires=Sat,”中间没有换号的原因,但是有输出了“;”
莫非是换行的问题,不知道header的换行怎么控制。
发表于 2012-3-18 01:03:41 | 显示全部楼层
- -我没说域名问题啊,我不是说是没有写过期时间导致不能设置的嘛……
 楼主| 发表于 2012-3-18 09:29:52 | 显示全部楼层
哦,帖子地址错了,今天找不到了,见谅。
 楼主| 发表于 2012-3-19 19:19:58 | 显示全部楼层
本帖最后由 阿亮 于 2012-3-19 20:13 编辑

update:今天再次调试,看了看正常登录的header,没有换行,Set-Cookie以 path=/"结尾,不存在换行问题,
用js直接写cookies:
JS复制代码
 
[color=#000][font=Consolas,]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=/"[/font][/color]
 
复制代码

能够设置成功,说明不是什么特殊字符不能写入cookies,为什么登录后的跳转就是没有cookies呢,
之前注意到header中有重复的两条Set-Cookie:
难道是跟这个有关系?

发表于 2012-3-19 19:49:48 | 显示全部楼层
直接换用我发布的 Session 类就解决了,不用这么纠结。。。。
 楼主| 发表于 2012-3-19 20:09:40 | 显示全部楼层
老大,我用的就是session类。model的longin方法,比对匹配后:
PHP复制代码
 
                                $newdata = array(
                                                'session_name'  => $loginID,
                                                'Permissions'     => $row->Permissions,
                                                'username' => $row->username
                                );
 
                                $this->session->set_userdata($newdata);
                                return TRUE;
 
复制代码


controller根据返回值redirect

发表于 2012-3-19 20:29:50 | 显示全部楼层
阿亮 发表于 2012-3-19 20:09
老大,我用的就是session类。model的longin方法,比对匹配后:

我说是我写的 Session 类,不是 CI 自带的。。。。
CI 的 Session 是 Cookie 实现的,而我写的是用的 PHP Session。
 楼主| 发表于 2012-3-19 21:02:23 | 显示全部楼层
[2.0.x] PHP 原生 Session 类库,可完全替代 CI 自己的 Session 类库 http://codeigniter.org.cn/forums/thread-4007-1-1.html
///
是这个吧,用一段时间试试看,
只是不支持写入数据库,也就不会比对是否修改session
用的是PHPSESSID,加密了的ID,具体内容应该是存在服务器内存中,即使修改ID,也应该不容易突破权限。

本版积分规则