Есть ли способ заставить Zend_Session_SaveHandler_DbTable писать в базу данных раньше? - PullRequest
1 голос
/ 30 марта 2012

У меня есть следующая таблица, которая обрабатывает резервы:

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.

У меня проблемы при создании сеанса, и в рамках того же сценария попробуйте использовать его Session_ID для вставки записи в «Графики» (показано выше), поскольку записи не существует в таблице «Сеансы».

Могу ли я заставить Zend_Session_SaveHandler_DbTable ранее сохранить свои данные в базу данных? Если да, то как?

1 Ответ

1 голос
/ 30 марта 2012

См. PHP session_write_close () / session_commit ().Это запишет данные сеанса и завершит сеанс.

В качестве альтернативы, почему работа на графиках не работает?ФК ограничения или что-то?Вы знаете session_id, его просто нет в базе данных.Но вы знаете, что это будет при вставке (при условии, что сессия будет завершена, как и ожидалось).Полагаю, не идеальный, но работоспособный.

...