2009-08-11 138 views
0

我使用codeigniter的会话类来处理我的PHP会话。一到站点每次访问自动创建的会话变量是SESSION_ID:codeigniter会话类的安全超时值?

用户的唯一的会话ID(这是一个统计学的随机字符串具有非常强的熵,使用MD5加密的便携性,和再生(默认)每五分钟)

我的网站上我需要的功能来跟踪注册用户的,我现在有这个访问者的SESSION_ID与价值存储的ID在访问者数据库中的表进行比较来实现。除了会话标识每五分钟超时之外,这种方式完美无缺。我希望我的应用程序记住访问者的时间超过5分钟(有点像您在发布问题或回答时没有注册时的操作)。

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

更新:根据迄今为止所见的答案,它似乎更像是一个性能问题而非安全问题。它有点奇怪,codeigniter会话类是如何工作的,因为当创建一个新的会话时,它也会创建一个新的cookie,这个cookie似乎只要会话就存在。我想我可以用会话ID创建另一个cookie,持续时间只要我需要它。但是,如果我要将会话保存12小时,会有多少性能问题?它会减慢速度,除非我在12小时内有数百万的独立访问者(在这种情况下,我会有更大的问题担心......)?

回答

1

两件事情有这种想法:

  • 如果用户去从他们的计算机远(无锁它/关闭浏览器),别人可能会用它来进入您的网站与自己的帐户
    • 好,这可能不是你的问题
    • 如果你有一些登录/密码字段,你的用户或许已经有了自己的登录名+密码由浏览器存储反正(当然,对于registedredØ NES,反正 - 那些可能有更多的“权力”比未注册的)
  • 如果你有大量的用户在你的网站,你将有更多的会话文件
    • 作为会话存储在文件
    • (相同的,如果它们存储在DB/memcached的 - 在这种情况下,你必须确保你已经配置的memcached所以有足够的内存来存储更多的会话)

所以,是的,存在一个小的安全风险;但我不认为这是真的有关。


另一个想法是保持一个短的会话生命周期,但要将一些信息存储在cookie中,并且一生比这更重要?
足够的信息,实际上,允许重新创建一个新的会话,而不需要用户注意任何东西?

但是,是的,这将需要在你身边更多的工作...


您的编辑之后添加更多的精度:

它有点奇怪怎么笨因为当 创建一个新的会话时,它也 创建一个新的cookie,似乎 只要会话持续。

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

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

但如何表现的关注 的多会是如果我要保存像12小时 会议?

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

0

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

+0

我的理解可能off..but做会议甚至可以一次页面被关闭保存? – oym 2009-08-11 04:55:44

+1

我对这种混淆表示歉意,也许我误解了。会话有一个默认设置超时期服务器端。即使用户关闭浏览器,会话也可能会持续存在,具体取决于设置的超时时间。 – 2009-08-11 05:16:40

0

一个安全提示:

离开sess_match_useragent(application/config/config.php)