codeigniter会话类的安全超时值?

时间:2009-08-11 04:27:07

标签: php session codeigniter

我正在使用codeigniter的会话类来处理我的PHP会话。每次访问该站点时自动创建的会话变量之一是session_id:

  

用户唯一的会话ID(这是一个统计上随机的字符串,具有非常强的熵,用MD5进行散列以便于移植,并且每五分钟重新生成一次)(

在我的网站上,我需要具有跟踪未注册用户的功能,我现在通过将访问者的session_id与数据库中VISITOR表中存储的id值进行比较来实现此功能。除了会话ID每五分钟超时这一事实外,这种方法非常有效。我希望我的应用程序能够记住访问者超过5分钟(有点像你在没有注册的情况下发布问题或答案时所做的那样)。

我的问题是:你能看到任何安全问题,只需延长会话级别的再生时间(大约12小时)吗?

更新:根据我到目前为止看到的答案,似乎更多的是性能问题,而不是安全问题。 codeigniter会话类的工作原理有点奇怪,因为在创建新会话时,它还会创建一个新的cookie,它似乎只要会话持续存在。我想我可以使用会话ID创建另一个cookie,只要我需要它就会持续。但是,如果我要保存12小时之类的会话,会有多少性能问题?它会减慢速度,除非我在12小时内拥有数百万独立访客(在这种情况下,我会担心更大的问题......)?

3 个答案:

答案 0 :(得分:1)

有这个想法的两件事:

  • 如果用户离开他们的计算机(没有锁定/关闭浏览器),其他人可能会使用它来使用他们的帐户访问您的网站
    • 嗯,这可能不是你的问题
    • 如果您有一些登录/密码字段,您的用户可能已经通过浏览器记住了他们的登录名+密码(好吧,对于已注册的用户,无论如何 - 那些可能具有更多“权力”而不是注册的)
  • 如果您的网站上有大量用户,则会有更多会话文件
    • 因为会话存储在文件中
    • (如果它们存储在DB / memcached中,则相同 - 在这种情况下,您必须确保已配置memcached,以便有足够的RAM来存储更多会话)

所以,是的,安全风险很小;但我不认为这是真的相关。


另一个想法是保持短暂的会话生命周期,但是在cookie中存储一些信息,其寿命比那更重要吗?
实际上,有足够的信息允许重新创建新会话,而用户却没有注意到任何内容?

但是,是的,这需要你做更多的工作......


在编辑后添加更多精确度:

  

有点奇怪的是codeigniter   会话类因为何时起作用   它也创造了一个新的会议   创建一个新的cookie似乎   只要会议持续下去。

这是处理会话的“标准”方式 - 至少在PHP中:

  • 会话的数据存储在文件中,磁盘上,服务器上
  • 和cookie用于在用户和包含其会话信息的文件之间保持“链接”。没有该cookie,就无法知道这些文件中的哪一个包含特定用户的会话。
  

但是有多少性能问题   如果我要拯救它,那就好吗?   12个小时的会议?

如果您的网站上有数百万用户,这将意味着拥有数百万个文件,每个文件包含一个用户的会话数据 - 并且拥有太多文件并不好。
但是你有几百个用户,我想这应该是好的。

答案 1 :(得分:0)

根据您网站的访问者数量,将会话保存12小时可能不是一个好主意。为什么不使用cookies?这取决于用户是否在浏览器中启用了它:http://www.php.net/setcookie

答案 2 :(得分:0)

一个安全提示:

sess_match_useragent(application/config/config.php)

上保留 True