【问题标题】:Why does codeigniter store its sessiondata in a cookie?为什么 codeigniter 将其 sessiondata 存储在 cookie 中?
【发布时间】:2011-07-26 17:06:57
【问题描述】:

为什么 Codeigniter 会这样做?我的意思是,如果用户可以看到他们的会话中存储了哪些数据,那不是很不安全吗?如果他们改变 cookie 中的值怎么办?

【问题讨论】:

  • This 是另一种选择......而且还有更多。

标签: codeigniter


【解决方案1】:

嗯,它是关于用户的数据。如果他们想改变它……那又怎样?我看不出它有多“不安全”。

可以加密会话数据,或使用数据库进行会话数据完整性验证。

The documentation is your friend; use it.


对于它的价值,它确实不使用原生 PHP 会话似乎很愚蠢。该文档声称这为开发人员提供了“更大的灵活性”,但鉴于该页面上列出的警告,我无法想象如何。

【讨论】:

  • 例如,如果用户有一个具有管理员级别的会话。如果人们可以更改值并且他们也是管理员,那将是不安全的。
  • @user558117:您永远不会在会话数据中存储身份验证权限。即使您这样做了,您当然也不会将会话数据作为权威来源。
  • The documentation claims that this offers "more flexibility" to developers, but given the caveats listed on that page, I can't imagine how. 用户数据存储在客户端的 cookie 中。这可以通过使用加密的 cookie 进行更改。不是每个人都将私人数据存储到会话中,因此默认情况下不需要对其进行加密。我猜这被称为灵活性功能。
  • @LightnessRacesinOrbit :但是每个浏览器都有 cookie 大小的限制,并且每个请求都会发送 cookie,你真的认为这是个好主意吗,DB 很好,但不适合高流量网站,
【解决方案2】:

在 Cookie 中存储会话是最糟糕的做法,每个浏览器都有 cookie 的大小限制,而 cookie 是每次请求都会发送的东西,虽然它是简单的 ajax 请求,但这种做法只会让你的请求变慢,我认为在为 Codeigniter 开发会话库时,他们可能会想到,用户只会在会话中存储少量数据,但将会话存储在 Cookie 中简直是愚蠢的想法

【讨论】:

    【解决方案3】:

    看看这个:https://bitbucket.org/xperez/core-session-storage-for-codeigniter

    它是带有原生 php 会话的 ci_session 接口的包装器,因此也适用于 memcached 而不是 DB。

    干杯

    【讨论】:

      【解决方案4】:

      好吧,Codeigniter 对会话的开箱即用解释与 PHP 会话的解释不同。如果你想通过 $_SESSION 超级全局变量,你仍然可以使用 PHP 会话,但 Codeigniter 基本上将会话视为更方便的 cookie。不过,您可以将会话存储在数据库中,这就是我所做的,并且会阻止用户更改会话值。

      如果您想要半安全的会话变量,如果您不想麻烦地让 Codeigniter 将会话值存储在加密的数据库中,请使用内置的 PHP 变量。

      详细文档中解释了一切:http://codeigniter.com/user_guide/libraries/sessions.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 2012-02-10
        • 1970-01-01
        • 2022-08-10
        • 1970-01-01
        相关资源
        最近更新 更多