В документации по PHP говорится: «Вы не можете использовать ссылки в переменных сеанса, поскольку нет возможности восстановить ссылку на другую переменную».Хранение объектов в сеансе PHP
Означает ли это, я не могу иметь такие вещи, как:
session_start();
$user = new User;
$user->name = 'blah';
$_SESSION['user'] = $user;
Я пытался сохранить простую строку и объект пользователя в сессии, строка всегда сохраняется между страницами к страницам, или после того, как Обновление страницы. Однако пользовательская переменная теряется в $ _SESSION (становится пустой).
любая идея?
Редактировать: Я подтвердил, что session_id одинаково во всех этих страницах/подстраницах, до & после обновления страницы.
Редактировать: Странно, после того, как я попытался выполнить сериализацию и неэтериализованный подход ниже, сериализованный пользовательский объект (или строка) в сеансе все еще исчезает!
Редактировать: Наконец-то я понял, что это за ошибка, выглядит как-то $ _SESSION ['user'] получает перезапись какой-то таинственной силой, если я использую любую переменную, отличную от «пользователя», тогда все в порядке. PHP (не менее 5,3, который является используемой версией) автоматически сериализуется и несистемаризуется, когда вы помещаете объект в $ _SESSION.
session_start();
$user = new User();
$user->name = 'blah'
$_SESSION['myuser'] = $user;
Сессии PHP могут быть угнаны, поэтому лучше никогда не хранить информацию о пользователях в них. Я бы сохранил идентификатор пользователя и hashed пароль в cookie. Затем, когда вам нужна информация о пользователе, вытащите из своей базы данных (используя идентификатор, хранящийся в файле cookie), а затем проверьте хэш пароля. Если хеш-чек проходит, заполните свой пользовательский объект информацией из базы данных. – brianreavis
, но при этом каждый раз, когда вам нужно собирать информацию о пользователе, каждый раз добавляет накладные расходы на вызовы базы данных, вместо того, чтобы извлекать информацию о пользователя из базы данных, а затем использовать ее через сеанс. – user157195
Несомненно, он добавляет накладные расходы. Но вам больше не нужны дополнительные накладные расходы или безопасность? Вы * можете * хранить пользовательские данные в сеансе *, если * вы должны были проверить его (путем соединения техники cookie). Но, конечно, не используйте сеансы слепо. – brianreavis