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

[HELP] ◆请教关于SessionID验证◆

[复制链接]
发表于 2010-2-28 22:26:19 | 显示全部楼层 |阅读模式
在CI手册里关于Session数据存入数据库中的描述中说到:“由于Session数据数组是附带一个Session ID保存在用户cookie里的,你无法验证它,除非你把session数据存储在数据库中。在一些不需要或很少需要安全保护的应用中,session ID 或许并不需要。但如果你的应用需要安全保护,验证是必须滴。”。由于我对Session的理解是:在用户访问网站时,用户通过登录验证后服务器将给用户分配到Session,且在Session中记录用户的相关信息,这些信息可以在网站的不同页面里使用,当用户退出网站或关闭浏览器后则Session自动销毁。何时需要用到SessionID?或者说何时需要SessionID来验证?如何验证?(不考虑服务器集群的情况),望指教,谢谢!
发表于 2010-2-28 22:38:00 | 显示全部楼层
这里的 Session 就是常规意义上的 Session,也就是你所理解的。
只不过 CI 的 Session 是用 Cookie 实现的,所以如果不加密就容易被破解和攻击。
 楼主| 发表于 2010-2-28 23:45:22 | 显示全部楼层
这里的 Session 就是常规意义上的 Session,也就是你所理解的。
只不过 CI 的 Session 是用 Cookie 实现的 ...
Hex 发表于 2010-2-28 22:38



    谢谢HEX的热心回答,但我问的不是Session本身的安全问题,而是有关SessionID的问题,因为看到CI手册里有说到将Session 数据存入数据库,但是我不明白为何要存入数据库?其中存入数据库的SessionID又是干吗用的?这是我的疑惑
发表于 2010-2-28 23:55:50 | 显示全部楼层
呵呵,你是问这个呀,存入数据库是一个可选的,也就是 CI Session 支持两种存储方式,一个是 Cookie 一个是数据库,没本质区别。
SessionID 就是为了标识每个会话的,顾名思义会话ID。这个 ID 是要存到 Cookie 中的,不管你存不存数据库,这个和 PHP 原生 Session 是一样的,都要在客户端存储一个 ID,以便标识每个会话。如果 cookie 中某个 ID 所对应的 Session 存在就把这个会话数据取出来,就是这个意思,呵呵。
为了要在数据库中找出这个 ID 所对应的 Session 数据,当然也要把 ID 存到数据库里了。
 楼主| 发表于 2010-3-1 00:24:41 | 显示全部楼层
那具体匹配数据库和用户端Cookie里存的SessionID的工作是如何操作的?还是说这个匹配的工作是由CI完成的,对于程序员来说是透明的?
发表于 2010-3-1 01:09:38 | 显示全部楼层
这当然是 Session 类库自动完成的,否则还叫什么类库呀?连 PHP 原生 Session 都是自动设置会话的呀(也就是那个 $_SESSION 变量)。
不管你用不用数据库,完全按照手册的方法就可以使用 Session,你自己测试一下就明白了,或者看看 CI 源码。
发表于 2010-3-1 10:50:32 | 显示全部楼层
Session ID = 序列化+md5以下数组
(
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp
)
CI是完全开源的东东,有什么是不透明的?
发表于 2010-10-9 12:27:04 | 显示全部楼层
请问怎么把session信息保存到数据库,并且要用的时候取出?
发表于 2010-10-9 13:38:17 | 显示全部楼层
不用取出来,因为存放到数据库是怕用户没有打开COOKIE而不能浏览页面。
所以借用数据库是当做COOKIE使用,那么CI的SESSION就可以用了。没必要对那个表进行手动读取之类的。

本版积分规则