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

[讨论/交流] cookie,session和ci自带session类

[复制链接]
发表于 2012-12-3 17:56:07 | 显示全部楼层 |阅读模式
本帖最后由 qingxin 于 2012-12-4 09:41 编辑

先说总的,总体来说,cookie和session的表现形式是一样的,都是php的全局变量,就安全性而言,也是同等的,没有孰优孰劣。存储的话我只了解cookie,也是百度过来的,session不清楚。对于cookie,临时性(过期时间在浏览器关闭之前或关闭之时)的cookie不会在客户端形成单独的文本文件,而是直接存储在请求头部。临时性session会保存在服务器端临时文件里,因为session依赖于客户端名为PHPSESSIONID的cookie值进行传递,这个值也可以存在于REQUEST变量中,也就是说它既可以存储于cookie也可以通过get或post变量传递。
注:REQUEST会截获请求头部任意类型变量,所以,如果cookie、get、post等的总集合里如果出现相同索引的变量会发生覆盖。
从操作的简易程度上看,session更加容易操作,对于临时性的session来说,按照数组的操作方式来操作session即可。但是cookie的设置和删除有点麻烦,不能像数组那么简单的通过赋值和unset实现设置和销毁,并且使用过程中常常会出现一些意外。
cookie适用于要永久储存用户信息的情况下,但是不适用于实时条件下。因为cookie具有延时性,也就是说服务器端读到的cookie永远都是上一次的痕迹。为什么会这样?因为对于服务端,他首先要发送一个cookie的存储命令,客户端才会选择合适的方式对cookie进行存储或修改,而发送cookie存储指令和读取cookie看上去是同时进行的,但实际上发送cookie存储指令在读取cookie之后,别忘了第一次读取cookie的时候是没有cookie可读的,因为这时候指令还没发出去,仅仅是客户端向服务端打了个招呼而已。这就造成cookie的读取总是要慢一拍。
session的存储和读取时实时的,也就是说刚设置的session值是可以被立即读取的,所以可以放心大胆的用,基本上没有任何副作用。当然,session_start要在浏览器的任何输出之前调用。
ci自带session类,其实是采用了客户端cookie,这是手册上说的明明白白的,因为他可以对cookie加密,所以比自己直接设置cookie要舒服些,也安全些。如果要设定自定义cookie,建议还是使用原生的php函数,ci自带的cookie辅助函数并不能带来方便。
所以,一般我用ci的session保存用户信息,因为考虑到可能永久存储。对于用户数量庞大的互联网应用,服务器的空间开销不可能忽略不计。cookie用来存储一些辅助信息但对实时性没要求,比如记录一下客户机经常访问的内容,这些信息同样有可能永久存储。而session基本上被我当成全局变量来用,他比global具有的优势是可以跨越多个页面,global只能在一次请求中发挥作用,而session可以跨越多个请求,并且还是实时的。
最后,还有一点要注意,永久cookie只有4kb的存储空间。

这次不贴代码了,只是交流思想,依然发新手区,所以高手绕道,对于有些人,我只能说,没有代码,我说个J8。

发表于 2012-12-5 09:25:31 | 显示全部楼层
Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
发表于 2012-12-9 17:19:14 | 显示全部楼层
cookie在客户端可以直接被非法修改啊,超不安全的
起码session是存储在服务器的,比cookie安全多了
而CI的设计者却把session存储在cookie中,怎么想的啊。
我还是用原生的session好的吧{:soso_e154:}
 楼主| 发表于 2012-12-10 11:37:50 | 显示全部楼层
夏の逸 发表于 2012-12-9 17:19
cookie在客户端可以直接被非法修改啊,超不安全的
起码session是存储在服务器的,比cookie安全多了
而CI的 ...

ci的session可以设置加密的,而且一般来说这些信息仅仅用来识别登录,涉及财产操作一般在处理程序上还要重新对数据库信息进行验证
发表于 2012-12-10 21:00:40 | 显示全部楼层
其实关于cookie的问题在国外的一些博客里讨论的很多已经不再纠结于它的安全性了

倒是有很多网站尝试用它来做永久登陆
(其实相当一部分站点的用户安全检测没必要太严格的,相反的永久登陆反而带来更大的体验优势)

所以对于cookie的安全性这种鸡肋的问题还是视具体情况来说吧

如果是银行密码什么的 就算加密也不会放心放进cookie吧

本版积分规则