【问题标题】:Storing php session data in a cookie将 php 会话数据存储在 cookie 中
【发布时间】:2013-05-28 17:40:34
【问题描述】:

我知道默认的 PHP 会话存储机制是一个文件,通常在 tmp 中。并且 session_id 被携带在一个 cookie 中。

我也想在 cookie 中存储我的少量会话数据。 (就像 Rails 默认做的那样。)

问题:是否有一个 php 库可以为我处理这个问题,还是我需要使用 session_set_save_handler 等自行开发?

补充:只是CodeIgniter session class可用吗?

【问题讨论】:

  • 不要弄乱 PHP 会话 cookie。如果您想将数据存储在 cookie 中,请使用另一个 cookie。

标签: php codeigniter


【解决方案1】:

你需要问自己的是为什么你这样做。只要您提供会话 ID,您就可以访问会话本身中存在的任何信息。如果您更喜欢以其他方式执行此操作,则必须推出自己的会话系统。

以下几点与您的想法相反:

  • Cookie 具有最大大小 (4kb)。 CI cookie 溢出实际上很常见。
  • 文件服务器端的信息保证防篡改(或与您的服务器一样防篡改)。 cookie 中的信息不是
  • 如果是“OMG DISK READ”让您感到害怕 - 您可以随时将 redis 绑定为您的会话管理器。这实际上是微不足道的。
  • 最后,当您的代码被移植到其他地方时,您将拥有一个重要的 PITA

假设您仍然想这样做(您真的确定吗?),答案就是设置另一个 cookie。 PHP 会话处理程序最好不要乱用,因为如果更改出错,有很大的风险会到处乱扔 500。第二个 cookie 是您最好的选择。

【讨论】:

  • 感谢您的回答......但如果这是一个坏主意,为什么现在它是 Rails 的默认设置?如果需要,加密可以处理安全问题。 ps 我可以使用第二个 cookie,我没想到。
【解决方案2】:

试试这个

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );

$this->session->set_userdata($newdata);



$this->input->set_cookie($newdata);

【讨论】:

  • OP 没有询问如何使用 CodeIgniter
  • @DamienPirsy:那是您投反对票和/或报告为不是答案的时候。 + 这个特定标本的质量低。
  • @SébastienRenauld 我更喜欢在投反对票之前发表评论(我没有在这里)。顺便说一句,这是一个答案,而且质量不低(好吧,也许是临界值)-根据我阅读它们时的指导方针,这些标志可能会被拒绝。我更愿意警告发帖人,他可能误解了这个问题——这里很可能就是这种情况
猜你喜欢
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2013-06-10
相关资源
最近更新 更多