【问题标题】:Special chars in serialized object are destroying PHP session序列化对象中的特殊字符正在破坏 PHP 会话
【发布时间】:2018-12-22 02:53:29
【问题描述】:

用户登录后,我序列化用户对象并将其存储在他的会话中,就像这样

$_SESSION['User'] = serialize($this);

所以我可以在进一步的步骤中更快地访问他的数据。

现在,有时用户无法保持登录状态,因为他们的会话在下一个页面请求时立即被破坏。我发现这是因为用户存储在他的数据中的特殊字符。例如。在一种情况下,通知中有一些甜蜜的困难

s:72:"♥ Aufsicht ♥ <br>...;"

在另一种情况下,电话号码是从 Apple 联系人中复制的,等等。 在会话中存储是否有限制,例如仅 ASCII 字符?我是否必须将整个字符串转换为另一种格式,例如Base64?或者如何最好地处理这个? 谢谢。

【问题讨论】:

  • 你的网站是 UTF-8 的吗?
  • 会话真的被设置了吗?你有任何错误吗?请发布一个最小的演示示例。
  • 是的,请给我们一个现实的例子。该字符串不能为 72 字节长。
  • 是的,网站都是 UTF-8 格式。会话设置正确,可以很好地与很多用户一起使用。而字符串只是大字符串中的一小部分,只是用特殊字符来说明的部分。嗯,我试着举个例子..
  • 1.您不必对放入$_SESSION 的数据进行预序列化,这是会话处理程序的工作。 2.仍然没有理由导致您描述的行为。

标签: php session serialization special-characters


【解决方案1】:

非常感谢 Sammitch 在他的评论中的注释:问题在于预序列化。如果我只是将对象分配给$_SESSION 就像

$_SESSION['User'] = $this;

如果对象的某个字段包含这些字符也没问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多