PHP在cookie中存储对象;不起作用


PHP Storing object in cookie doesn't work

我正在开发一个网站,用户可以在其中注册和访问他们的帐户,当用户连接时,我使用序列化和base64编码将user对象保存在cookie中。它运行得很好,突然PHP脚本不想创建cookie。我的PHP脚本是:

/**
 * Function that creates a cookie from an User object
 * @param User $user User object to be stored in the cookie
 * @param int $timeout Lifetime of the cookie (0 if should be destroyed when the navigator is closed)
 */
function setUserCookie($user, $timeout = COOKIE_MAXLIFETIME) {
    setcookie('user', base64_encode(serialize($user)), $timeout, '/');
}

我不知道问题是从哪里来的,我希望有人能帮助我:)

编辑:这是大学的一个项目,我知道我的网站在cookie中存储对象时可能会受到攻击,但我们必须关注功能,而不是网站的安全性。

不要将序列化字符串存储在外界可以看到和操作的地方!这是个安全漏洞!为什么?

序列化字符串包含用于生成对象的类的名称。这是可以更改的。取消对任意字符串的序列化意味着创建了任意对象。如果这个对象代码可用,它就会被执行。这基本上是一个远程代码执行漏洞,因为外部攻击者可以在某种程度上选择要执行的代码。

如果您真的想将数据存储在cookie中,请使用只包含数据、不引用任何PHP对象的序列化格式。json_encode()可能是正确的。更好的方法是使用会话并存储与当前登录服务器端相关的任何内容。

我最终使用了$_SESSION使其工作,即使用户无法继续登录网站。