用户
 找回密码
 入住 CI 中国社区
搜索
楼主: 她的鱼
收起左侧

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

[复制链接]
发表于 2013-11-2 09:49:14 | 显示全部楼层
Hex 发表于 2013-11-1 17:19
CI 的 Session 都是存储在浏览器端的 Cookie 中的。

实际上,存储在服务器上的 Session 也需要至少把 Ses ...

可能我有点不够潮流了,不知道谁把数据存在浏览器的 cookie 叫做 session 的。 搞 php 开发的,手册上关于 session 的解释应该很清楚了。

- 早前根本没人把id和数据存在cookie的作法叫session,只是一种浏览器关闭失效的加密cookie而已
- 传统意义上 cookie 只支持 4k 左右的大小,加密更会占用空间,所以能保存的数据相当小
- 因为需要使用加密的数据,所以有公开的解密算法,所以这种级别的加密只能是小儿科,很容易被人获取解密,直接泄漏数据。服务器端的保存方法,最多是 session id 被人窃取模拟,不攻破 server或者不输出相关数据,恶意攻击者永远拿不到 session 的信息
发表于 2013-11-2 10:12:55 | 显示全部楼层
其实不用太纠结概念,无论是存放Cookie中或者存放服务端、数据库、Redis中,它都是一个概念,保存用户在这个会话过程中一些数据,只是实现不同。
发表于 2013-11-3 00:45:38 | 显示全部楼层
Bobby 发表于 2013-11-2 10:12
其实不用太纠结概念,无论是存放Cookie中或者存放服务端、数据库、Redis中,它都是一个概念,保存用户在这 ...

存在浏览器端的cookie和存在服务器端有很大差别哈。
发表于 2013-11-3 00:46:58 | 显示全部楼层
Bobby 发表于 2013-11-2 10:12
其实不用太纠结概念,无论是存放Cookie中或者存放服务端、数据库、Redis中,它都是一个概念,保存用户在这 ...

就是 10 楼我回的,cookie 里保存 session 信息是很不明智的---这种搞法根本就不应该就 session , 就是 cookie 嘛
发表于 2013-11-3 08:52:02 | 显示全部楼层
Hick 发表于 2013-11-3 00:46
就是 10 楼我回的,cookie 里保存 session 信息是很不明智的---这种搞法根本就不应该就 session , 就是  ...

在服务器端数据未过期之前,获取到Cookie中保存的Session ID一样可以很方便拿到服务区端的数据的。

COOKIE的大小影响页面打开的速度,我也不建议把SESSION直接存在Cookie中。

我理解的session就是一种会话状态,不论这种会话状态保存在哪里,他都叫session。保存数据的方式只是一种实现。
发表于 2013-11-3 09:01:07 | 显示全部楼层
Bobby 发表于 2013-11-3 08:52
在服务器端数据未过期之前,获取到Cookie中保存的Session ID一样可以很方便拿到服务区端的数据的。

COOK ...

你确认没有搞错?
获取到Cookie中保存的Session ID你怎么拿到服务器端的数据?写一段 php 传到服务器端输出?
发表于 2013-11-3 09:54:13 | 显示全部楼层
Hick 发表于 2013-11-3 09:01
你确认没有搞错?
获取到Cookie中保存的Session ID你怎么拿到服务器端的数据?写一段 php 传到服务器端输 ...

session的原理就是根据客户端cookie中保存的SESSION ID来服务端读取数据,如果获取到了这个ID了为啥不可呢? 只需要在http请求中带上该Cookie即可。火狐中的插件Tamper Data就可以模拟这个操作。
发表于 2013-11-3 11:35:09 | 显示全部楼层
Bobby 发表于 2013-11-3 09:54
session的原理就是根据客户端cookie中保存的SESSION ID来服务端读取数据,如果获取到了这个ID了为啥不可 ...

你还是没搞清楚 浏览器和服务器 交互的整个过程。
不在于什么“Tamper Data”, 走 http 协议没什么特别不能模拟的 http 请求。 这里的问题是 session 存在服务器端,浏览器段只模拟一个 session id 有什么用?  浏览器是跟 web server 打交道的,web server 不输出 session 的其他信息,你能拿到的永远只有 session id 。
发表于 2013-11-3 11:50:35 | 显示全部楼层
Hick 发表于 2013-11-3 11:35
你还是没搞清楚 浏览器和服务器 交互的整个过程。
不在于什么“Tamper Data”, 走 http 协议没什么特别 ...

数据最终的显示还是界面, 不需要直接获取session中存储信息,而是获得登录用户的权限。

获取到登录用户的session id后, 请求的时候发送同样的seesion id到服务端,服务端自己可以拿到数据并判断该用户已经登录,也就可以做一些登录用户的操作。
发表于 2013-11-3 11:56:06 | 显示全部楼层
Bobby 发表于 2013-11-3 11:50
数据最终的显示还是界面, 不需要直接获取session中存储信息,而是获得登录用户的权限。

获取到登录用户 ...

尽管都有安全问题,拿到 session id 模拟用户可以获得登录态,和直接取得 session 中保存的数据是俩码事、

"数据最终的显示还是界面, 不需要直接获取session中存储信息"   显示在界面的数据还是服务器端输出的,不是所有数据都是用来显示在界面的。

本版积分规则