apache _SESSION不会序列化对象

时间:2016-01-05 07:53:08

标签: php apache session serialization

首先,对不起,如果这篇文章发牢骚,但我整天都试图建立一个基本的登录系统而感到沮丧。我想我现在已经开始工作,希望我的代码可以帮助其他人,但我仍有疑问。

我创建了一个自定义User类。我创建了一个验证密码哈希的登录脚本。然后我将此User对象存储在会话中。但是当我在下一页上检索User对象时,它不是正确的类,它是__PHP_Incomplete_Class,这意味着我无法使用任何自定义函数来处理该Class对象。

所以,Google和SO以及所有地方都说我必须在开始会话之前声明该类,并且当我将它们存储在_session中时,这些对象会被apache自动序列化。但是,只有在手动序列化和反序列化用户时,我的对象才有效。

例如,这不起作用:

//page1:
require_once('UserClass.php');
session_start();
$User = new User;
$_SESSION[User] = $User;


//page 2:
require_once('UserClass.php');
session_start();
$User = $_SESSION[User];
$User->doSomething();//##ERROR

但这种方法确实有效:

//page 1:
require_once('UserClass.php');
session_start();
$User = new User;
$_SESSION[szUser] = serialize($User);


//page 2:
require_once('UserClass.php');
session_start();
$User = unserialize($_SESSION[szUser]);
$User->doSomething();//winning!

我讨厌我必须手动序列化我的对象。我确定将来忘记这会导致问题。我希望我的服务器能为我做这件事。

我的第一个代码方法有问题吗?或者我的lunarpages服务器是愚蠢的?也许有一个必须在配置或htaccess中更改的设置。我在共享主机上,所以我的变更能力非常有限。有没有一种最佳实践方法来处理这个问题而不放弃使用_sesssion?我刚读了另一个SO答案,我可以使用Class __sleep()和__wakeup()函数,但那些不是支持一些私有财产,我不确定他们是否会被我对_session的调用所触发。

如果它有帮助,这里是来自phpinfo()的可能相关的部分

PHP Version 5.5.26

session
Session Support     enabled
Registered save handlers    files user
Registered serializer handlers  php_serialize php php_binary wddx

Directive   Local Value Master Value
session.auto_start  On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    /dev/urandom    /dev/urandom
session.entropy_length  32  32
session.gc_divisor  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 4   4
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   no value    no value
session.serialize_handler   php php
session.upload_progress.cleanup On  On
session.upload_progress.enabled On  On
session.upload_progress.freq    1%  1%
session.upload_progress.min_freq    1   1
session.upload_progress.name    PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix  upload_progress_    upload_progress_
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_strict_mode Off Off
session.use_trans_sid   0   0

提前感谢您提供的任何配置更改或其他建议。

0 个答案:

没有答案