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

[讨论/交流] 略微观察了一下codeigniter的session,觉得挺诡异

[复制链接]
发表于 2013-10-31 19:48:44 | 显示全部楼层 |阅读模式
发现ci的session类是不是cookie额?因为我在cookie上面看到它哦,那个高手能给我解答一下吗?
发表于 2015-10-24 15:49:58 | 显示全部楼层
永恒forever 发表于 2013-11-1 13:06
好像 CI 的 session 是存在 cookie 里面的。我不确定,没看到代码,只是有一次遇到过,session 设置太多了 ...

谁说session是存在客户端的?
发表于 2013-10-31 20:51:04 | 显示全部楼层
ci的session是存在客户端的
发表于 2013-10-31 23:10:22 | 显示全部楼层
dren_a 发表于 2013-10-31 20:51
ci的session是存在客户端的

暂时还用不到,还真没接触过。

你说的这个存在客户端什么意思? 就是说浏览器端吧?session 怎么能只存在客户端?  服务端必须有保存相关信息---至少有一个id,并且需要用的时候客户端必须传给server端, 才能叫 session 吧?

BTW: cookie 也是存在客户端的,只是每次请求都会带上而已。
发表于 2013-10-31 23:16:29 | 显示全部楼层
Hick 发表于 2013-10-31 23:10
暂时还用不到,还真没接触过。

你说的这个存在客户端什么意思? 就是说浏览器端吧?session 怎么能只存 ...

ci的session是用cookie方式存在客户端的,传统方法是存在数据库的。
发表于 2013-11-1 10:27:43 | 显示全部楼层
dren_a 发表于 2013-10-31 23:16
ci的session是用cookie方式存在客户端的,传统方法是存在数据库的。

有这种“传统”?

这俩是是不同端的, cookie是存在客户端没错,跟存数据库有特别的矛盾么? 一个浏览器端一个服务器端。
基于 cookie 的 session 服务器端也可以是数据库,php里默认是存临时文件。





发表于 2013-11-1 13:06:44 | 显示全部楼层
好像 CI 的 session 是存在 cookie 里面的。我不确定,没看到代码,只是有一次遇到过,session 设置太多了,nginx 出现错误,如果 session 信息本身存储在服务器端或者数据库不会导致 nginx 错误的。
发表于 2013-11-1 14:30:51 | 显示全部楼层
Hick 发表于 2013-11-1 10:27
有这种“传统”?

这俩是是不同端的, cookie是存在客户端没错,跟存数据库有特别的矛盾么? 一个浏览器 ...

哥你书读得不错。。。。。

CI就是用的cookie来存的session,并不好用,所以论坛里提供了存数据库的外挂类:

http://codeigniter.org.cn/forums/thread-4007-1-1.html


发表于 2013-11-1 15:40:56 | 显示全部楼层
你发的这个贴扫了下,楼主这个说法很别扭: 真正的 PHP Session,存储在服务器端,而不是用的 cookie --- PHP 本身的 session 默认也是基于 cookie 的。

什么叫 "php session" 存储"在服务器端"?  session 之所以称为 session , 就是会话双方的事, client/server 两边至少都需要有标记 id 。  

听你的意思, 好像 CI 基于 cookie 的 session 是把 session id 意外的值保存在浏览器端, 没这么蠢的吧?

照这个思路,基于 cookie 的 session 应该有两种说法,一种 cookie 中只存 id , 一种还保存数据。  说实话把后者看作 session 就是个笑话。
发表于 2013-11-1 17:16:06 | 显示全部楼层
永恒forever 发表于 2013-11-1 13:06
好像 CI 的 session 是存在 cookie 里面的。我不确定,没看到代码,只是有一次遇到过,session 设置太多了 ...

CI 的 Session 确实是存储在 Cookie 中的。

发表于 2013-11-1 17:19:01 | 显示全部楼层
Hick 发表于 2013-11-1 15:40
你发的这个贴扫了下,楼主这个说法很别扭: 真正的 PHP Session,存储在服务器端,而不是用的 cookie --- P ...

CI 的 Session 都是存储在浏览器端的 Cookie 中的。

实际上,存储在服务器上的 Session 也需要至少把 Session ID 放在浏览器端,其他数据放在服务器上。
而 CI 则是把所有数据都放在浏览器端,这个从概念上是没问题的。

另外,把数据存放在 cookie 中也是经过加密的,从理论上说和存在服务端是一样安全的,所以不能叫做蠢吧。

关于什么是 Session,顾名思义 Session 就是一个会话过程,而用什么方式保持会话过程这个就是实现细节了。从HTTP协议上来看,实现Session只有一个方案,就是使用Cookie。但是 PHP 也支持通过 URL 实现 Session 的替代方案(具体可参考PHP手册)。

所以,把Session数据放在Cookie中是合理的方案,不能算笑话。

本版积分规则