2009-10-15 51 views
2

iam有点混乱,我去年开始学习php 5 OO方式。第一个项目是用Zend框架完成的。OOP - 会话和PHP

但是我的一些朋友正在讨论将对象存储在$ _SESSION超全局数组中。但是,我不能找到一个很好的例子,为什么或当这是nesecarry?

这将是伟大的,如果有人可以给我一个提示,为什么要在会议中存储对象。

+1

你通常*不*需要将它们存储在会话中。无论如何,你可能不应该传递大量数据......也许是一个ID或两个,但就是这样。也就是说,将这些数据放入一个对象并将其传递给对象没有任何问题。 – mpen 2009-10-15 05:54:35

+0

ty for accept ....:D – 2009-10-15 06:25:12

回答

4

会话本质上是一个变量,你可以存储任何你想要的东西,数字,字符,字符(字符串),结构.....对象。

它也是一个变量,通过页面保持不变。其最commanly用于保存用户登录信息

我如何使用Session对象如下:

可以说我有一个用户表在我的数据库,我需要显示的名字,大多名字我的所有网页的。

我能做些什么两样东西......老办法:

$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指定用户,然后使用存储的类来显示所有信息。

有很多更强大的事情你可以用类做。但上面显示了一个简单而有效的解决方案。

试试这个:如果添加和statments死statments在构建用户类......这构建用户时,你可以错误检查

希望这有助于

+0

其优先序列化对象然后存储在会话中。也访问需要反序列化 – 2016-11-23 07:34:16

2

HTTP是无状态的。如果你想在不同的页面抓取之间获得数据到persist,你需要一些其他的机制。 Cookie是一种方式,但由于它们存储在客户端,所以它们在服务器上不可信。 $_SESSION是持久可靠的存储方法之一。最常见的用法是登录系统。请注意,会话ID来自客户端,因此它们不可信,但您可以确定会话本身中存储的数据不会被欺骗。另一种选择是使用数据库,但是您必须添加代码以序列化/反序列化或以其他方式将存储在数据库中的数据转换为PHP对象或从其中转换。数据库关于会话的一个优点是数据不能在会话之间轻松共享。

至于存储对象而不是其他类型,这只是您的特定应用程序使用的问题,但它不是必需的。以登录示例为例,如果要在对象中存储经过身份验证的用户信息(例如用户ID和客户端IP地址),则可以将该对象存储在$_SESSION之内。

又例如,假设您正在编写一个使用对象来模拟消息的消息传递应用程序(例如论坛,电子邮件)。消息可以有附件,但附件表单是一个单独的页面,因此您将消息对象存储在$_SESSION中。不是最实用的设计,而是常见的设计,尽管AJAX的出现并不那么容易。