可以使用_SESSION来传递对象吗?

xxq123321 2009-10-18 03:48:10


比如作一个简单的后台系统,
我在登陆界面创建一个对象,传递给_SESSION;

session_start();
$mgr = $_SESSION['mgr'];
if(!isset($mgr))
{
$mgr = new CManager();
}
......

这样在每个页面中直接使用$_SESSION['mgr'],就像MFC的theApp;
在CManager这个类中我定义了自己的属性和方法,有访问数据库的操作,

这样写的目的是只要创建一个$mgr对象传递给$_SESSION['mgr'],就可以在不同页面之间使用这个对象,

问题是现在这么写好象有问题,就是CManager内部数据库对象回自动释放,这意味着我只要含有数据库操作的方法,

就必须每次做 连接数据库-查询-更新的操作。

其实我的问题就是,如果我在CManager的构造函数内连接了数据库并保存了这个返回的mysql对象作为类的属性

变得毫无意义,因为一旦页面跳转后刷新这个对象就会自动释放。

各位是如何在不同页面之间传递对象的呢?请赐教!!


...全文
249 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxq123321 2009-10-20
  • 打赏
  • 举报
回复
非常感谢二位的回复!!
xuzuning 2009-10-19
  • 打赏
  • 举报
回复


是的 CManager 内部数据库对象会自动释放,这意味着只要含有数据库操作的方法,就必须每次做 连接数据库-查询-更新的操作。
这种设计的原因是因为 HTTP 是无状态协议,每次 HTTP 对话都是独立的。所以每次 HTTP 通讯结束后都应该释放通讯时所占用的资源。否则将造成极大的资源浪费

当将对象序列化(SESSION也是序列化)时,应该重载对象的 __wakeup 方法,以便在对象恢复时自动完成先前的数据库连接和查询

手册的 Magic Methods 章节有完整的实例,你可以看一下

×× 使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

teng0210 2009-10-18
  • 打赏
  • 举报
回复
把对象序列化似乎可以.

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧