【发布时间】:2011-03-23 20:34:26
【问题描述】:
我接到了一项不好玩的任务,即尝试将 Zend 框架实例与古老的遗留代码结合起来,而不需要对遗留代码进行大量修改。其中一部分是一个多页表单,它接收大量数据,对其进行验证、处理,然后通过电子邮件将其发送给网站所有者。我的工作是将这些数据输入 ZF,然后我可以将其自动处理到数据库中。我不能使用 POST。我宁愿避免使用自动提交表单,因为我认为我不应该使用 Javascript。 Get 会非常笨拙。
我希望使用 Session 将数据从现有的表单处理器中取出并输入 ZF。数据已经在表单处理器的 Session 中。起初,我认为重定向到我的 ZF 实例(存在于主网站的子目录中)很简单。它是同一个域,应该是同一个会话,对吧?
嗯,ZF 处理其会话的方式导致旧的会话数据被完全彻底清除。它刚刚消失了。
那么 ZF 是否以清除现有会话的方式处理其 Session 或者这是侥幸?如果这不是侥幸,我该如何绕过它?如果是,可能是什么原因造成的/我该如何解决?
编辑
我将 Zend_Session_SaveHandler_DbTable 用于数据库支持的会话。这是在application.ini 中初始化的。下面是初始化代码:
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "Sessions"
resources.session.saveHandler.options.primary = "sessionID"
resources.session.saveHandler.options.modifiedColumn = "lastModifiedTime"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
我在使用会话时尝试调用session_start(),但这会产生错误。可能是因为保存处理程序代码已经初始化了会话,或者稍后才这样做。如果我尝试直接访问 $_SESSION 变量,我可能会出现错误,表明我试图访问未设置的变量。如果我先创建一个Zend_Session_Namespace,然后尝试访问$_SESSION,我将面临一个空会话。
【问题讨论】:
-
不一定是同一个会话号。这取决于您如何使用 Zend_Session。你在使用命名空间(Zend_Session_Namespace)吗?自定义或自动生成的 ID?看看一些代码会有所帮助。
-
如果可以检查,数据是仅在 ZF 应用程序中不可见,还是从两者中都删除了?
-
@netcoder 已编辑以根据要求添加更多信息。
-
@Phil 数据仅对采埃孚不可见。如果我回到原来的页面,数据就在那里。
-
@Daniel:你试过这个吗?
new Zend_Session_Namespace(session_name());默认情况下,ZF 将使用 Default 会话名称,而 PHP 使用 PHPSESSID。
标签: php zend-framework session