Zend framework 有没有办法强制Zend_Session_SaveHandler_DbTable更早地写入数据库?

Zend framework 有没有办法强制Zend_Session_SaveHandler_DbTable更早地写入数据库?,zend-framework,zend-session,Zend Framework,Zend Session,我有下表处理预订: CREATE TABLE `Plots` ( `Plot_ID` int(11) NOT NULL AUTO_INCREMENT, `Grid_ID` int(11) NOT NULL DEFAULT 0, `Instance_ID` int(11) NOT NULL DEFAULT 0, `Session_ID` char(32) DEFAULT NULL, `User_ID` int(11) DEFAULT NULL, `Transaction_I

我有下表处理预订:

CREATE TABLE `Plots` (
  `Plot_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Grid_ID` int(11) NOT NULL DEFAULT 0,
  `Instance_ID` int(11) NOT NULL DEFAULT 0,
  `Session_ID` char(32) DEFAULT NULL,
  `User_ID` int(11) DEFAULT NULL,
  `Transaction_ID` int(11) DEFAULT NULL,
  `CreateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `UpdateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `Plot` varchar(10) NOT NULL DEFAULT 0,
  `ReserveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `ReservationTimeoutDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `PurchaseDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`Plot_ID`),
  CONSTRAINT `Plots_ibfk_1` FOREIGN KEY (`Grid_ID`) REFERENCES `Grids` (`Grid_ID`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `Plots_ibfk_2` FOREIGN KEY (`Instance_ID`) REFERENCES `Instances` (`Instance_ID`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `Plots_ibfk_3` FOREIGN KEY (`Session_ID`) REFERENCES `Sessions` (`Session_ID`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `Plots_ibfk_4` FOREIGN KEY (`User_ID`) REFERENCES `Users` (`User_ID`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `Plots_ibfk_5` FOREIGN KEY (`Transaction_ID`) REFERENCES `Transactions` (`Transaction_ID`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
如您所见,“Session_ID”是我的Sessions表的外键,它由Zend_Session和Zend_Session_SaveHandler_DbTable管理

我在创建会话时遇到问题,在同一脚本中,尝试使用它的会话ID将记录插入“绘图”(如上所示),因为该记录不存在于会话表中


我可以强制Zend_Session_SaveHandler_DbTable将其数据更早地保存到数据库中吗?如果是这样,怎么做?

请参阅PHP的session\u write\u close()/session\u commit()。这将写入会话数据并结束会话


或者,为什么绘图工作失败?FK约束还是什么?您知道会话id,但它还不在数据库中。但您知道在插入时它将是什么(假设会话按预期关闭)。我想这并不理想,但可行。

请参阅PHP的session\u write\u close()/session\u commit()。这将写入会话数据并结束会话


或者,为什么绘图工作失败?FK约束还是什么?您知道会话id,但它还不在数据库中。但您知道在插入时它将是什么(假设会话按预期关闭)。我想这并不理想,但可行。

你能复制/粘贴你的application.ini或bootstrap(在初始化会话的地方)吗?你能复制/粘贴你的application.ini或bootstrap(在初始化会话的地方)。在ZF中,你可以调用
Zend_Session::writeClose()
,它最终会调用
Session\u write\u close()
。如果op很勇敢,他可以考虑手动调用
Zend\u Session\u SaveHandler\u DbTable::write($id,$data)
,但我认为
$data
的序列化可能会有一些不可预见的影响,因此最好使用标准的
Session\u write\u close
。如果您仍然需要向会话写入数据,您可以在调用close后立即重新启动会话。drew,您上面的评论就是我想要的答案,但我不能接受它作为答案。如果您想获得积分,请将您的评论移动到答案中,我会将其标记为已接受,否则,我只接受ficuscr的答案。在ZF中,您可以调用
Zend\u Session::writeClose()
,它最终将调用
Session\u write\u close()
。如果op很勇敢,他可以考虑手动调用
Zend\u Session\u SaveHandler\u DbTable::write($id,$data)
,但我认为
$data
的序列化可能会有一些不可预见的影响,因此最好使用标准的
Session\u write\u close
。如果您仍然需要向会话写入数据,您可以在调用close后立即重新启动会话。drew,您上面的评论就是我想要的答案,但我不能接受它作为答案。如果你想要积分,把你的评论移到一个答案中,我会把它标记为已接受,否则,我只会接受菲库斯克的答案。