我有点困惑,我从去年开始用面向对象的方式学习php5。第一个项目是使用Zend框架完成的。
但是我的一些朋友正在谈论在$_SESSION超级全局数组中存储对象。但是我找不到一个好的例子,为什么或者什么时候是nesecarry?
如果有人能给我一个提示,为什么要在会话中存储对象,那就太好了。
发布于 2009-10-15 06:00:42
Session本质上是一个变量,你可以在其中存储任何你想要的东西,数字,字符,字符(字符串),结构.....对象。
它也是一个在整个页面中保持不变的变量。它最常用的用途是保存用户记录的信息
使用Session对象的方法如下:
假设我的数据库中有一个users表,我需要显示我所有页面的名字和姓氏。
我能做的有两件事。老方法:
$result = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE userId=1"));
$_SESSION['userId'] = $result['userId'];
$_SESSION['firstname'] = $result['firstname'];
$_SESSION['lastname'] = $result['lastname'];现在你可以这样做了,这很好,但如果你有下面的代码就会好得多:
class user{
_construct($userId){
$qry_str = mysql_query("SELECT * FROM users WHERE Id=$userId");
$result = mysql_fetch_array($qry_str);
$this->userId = $userId;
$this->firstname = $result['firstname'];
$this->lastname = $result['lastname'];
}
public $userId, $firstname, $lastname;
}并初始化
$_SESSION['user'] = new user(1);或者说有多个用户:
$_SESSION['user'][1] = new user(1);
$_SESSION['user'][2] = new user(2);
$_SESSION['user'][3] = new user(3);然后,在您的代码中,您需要做的就是:在登录时通过userId分配用户,然后使用存储的类来显示所有信息。
你可以用类做更强大的事情。但是上面展示了一个简单而有效的解决方案。
尝试这样做:在user类的构造中添加if语句和die语句...在构造用户时,您可以进行错误检查
希望这能有所帮助
发布于 2009-10-15 05:51:33
HTTP是无状态的。如果您希望在不同的页面获取之间对数据进行persist,则需要一些其他机制。Cookie是一种方法,但由于它们存储在客户端,因此在服务器上不值得信任。$_SESSION是持久、值得信赖的存储的一种方法。最常见的用法是登录系统。请注意,会话ID来自客户端,因此它们不值得信任,但您可以相当确定存储在会话本身中的数据不是伪造的。另一种选择是使用数据库,但是您必须添加代码来序列化/反序列化或以其他方式将存储在数据库中的数据与PHP对象相互转换。与会话相比,数据库的一个优点是不能在会话之间轻松地共享数据。
至于存储对象而不是其他类型,这只是您的特定应用程序使用什么的问题,但这不是必需的。以登录为例,如果要在对象中存储经过身份验证的用户信息(如用户ID和客户机IP地址),则可以将该对象存储在$_SESSION中。
再举一个例子,假设您正在编写一个消息传递应用程序(例如论坛、电子邮件),该应用程序使用对象对消息进行建模。邮件可以有附件,但附件表单是一个单独的页面,因此您可以将邮件对象存储在$_SESSION中。这不是最有用的设计,但却是一种常见的设计,不过随着AJAX的出现,这种设计就不那么常见了。
https://stackoverflow.com/questions/1570483
复制相似问题