【问题标题】:Why does changing/making errors in codebase sometimes destroy a session in Codeigniter/PHP?为什么代码库中的更改/出错有时会破坏 Codeigniter/PHP 中的会话?
【发布时间】:2012-04-04 12:20:17
【问题描述】:

为什么在代码库中更改/出错有时会破坏 Codeigniter/PHP 中的会话?我无法弄清楚为什么有时会发生这种情况而不是其他情况的逻辑,这让我发疯了。

我想知道调用 sess_destroy() 的触发器是什么。如果我的脚本包含将数据写入会话的代码,是否只能销毁会话?我想我想弄清楚的是是否有重定向脚本烘焙到 codeigniter/php 以在解析错误时破坏会话,即使我没有明确地调用来更新会话数据

谢谢,

提姆

【问题讨论】:

  • 嗯,你做了什么改变?
  • 嗨,达米安,我不确定。在我进行许多更改之前发生这种情况时,我已经忘记了可能破坏会话的原因。我问这个问题是希望我可以更好地了解破坏会话的触发器。你能看到我上面更新的问题,这开始深入一点吗?谢谢,

标签: php codeigniter session


【解决方案1】:

如果您对代码进行了一些更改,导致解析错误或其他类型的致命错误,那么 php 可能无法将数据写入会话 - 因为脚本在 php 调用 session_write() 之前终止,而 php 通常会在脚本结束。

所以如果 php 永远没有机会调用 session_write(),你的会话数据就会丢失。

你应该检查你的 php 错误日志,看看你是否有任何致命错误,找到它们的来源并修复你的脚本。

【讨论】:

  • 嗨,德米特里,感谢您的建议。那么这是否意味着只有当我的脚本包含将数据写入会话的代码时才能销毁会话?我想我想弄清楚的是,即使我没有明确地调用更新会话数据,它们是否是烘焙到 codeigniter/php 中的重定向脚本以在解析错误时破坏会话。
  • 您可以在脚本中手动调用 session_write_close()。一旦您知道会话数据不再更新,立即调用 session_write_close() 并不是一个坏主意。这样您就可以确保会话数据已保存,即使脚本在此行之后终止,您的会话也将被保存。在此处查看文档us2.php.net/manual/en/function.session-write-close.php
  • hmm,我想保留用户更新某些会话数据的能力,例如他们的姓名、图片src="" 等。我必须在每个地方访问数据库似乎很愚蠢喜欢显示用户的姓名、图片等,这不会限制session_write_close()的用处吗?
猜你喜欢
  • 1970-01-01
  • 2013-10-31
  • 2015-07-02
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多