对对象使用PHP会话

对对象使用PHP会话,php,codeigniter,session,logic,Php,Codeigniter,Session,Logic,我可以选择在我的web项目上创建新合同 创建新合同由以下文件组成(注意法语): 合作客户 费希德库维特酒店 合同 分类客户机 瑞士菲希酒店 米塞广场平面图 CCI 金融危机 保存按钮 因此,我有一个主创建页面,用户可以单击其中一个文档,填写所有字段并返回到该屏幕。我目前的解决方案是在PHP会话上存储一个大对象(存储所有文档数据),并将用户所做的每一次修改附加到该对象上 例如,如果用户转到第一个文档,写入一些内容,然后返回到主面板,则数据将保存在会话中。当他单击保存按钮时会话中的所有内容都存储

我可以选择在我的web项目上创建新合同

创建新合同由以下文件组成(注意法语):

  • 合作客户
  • 费希德库维特酒店
  • 合同
  • 分类客户机
  • 瑞士菲希酒店
  • 米塞广场平面图
  • CCI
  • 金融危机

    保存按钮

因此,我有一个主创建页面,用户可以单击其中一个文档,填写所有字段并返回到该屏幕。我目前的解决方案是在PHP会话上存储一个大对象(存储所有文档数据),并将用户所做的每一次修改附加到该对象上

例如,如果用户转到第一个文档,写入一些内容,然后返回到主面板,则数据将保存在会话中。当他单击
保存按钮时
会话中的所有内容都存储在一个复杂的数据库模式中

如果在合同不完整时单击“保存”(它至少缺少一个文档),则大对象将存储在MongoDB中,并在以后恢复

  • 我做的每件事都被认为是良好的实践吗
  • 我不应该在会话中休息吗?(目前我没有任何问题。对象大小约为5kb)
  • 我是否也应该使用Mongo来存储中间数据
  • Ps:这是一个内部项目,所以安全性永远不会成为问题。问题是数据的一致性和质量


    还请注意,自定义对象是在会话中保存和恢复的,无需强制转换。至于mongo,我必须强制转换每个组件。

    在我看来,我几乎不擅长使用非关系数据库。我找到的解决方案非常简单:

    我序列化了对象,而不是像下面那样插入MongoDB,然后在从数据库中选择时使用复杂的强制转换

    之前:

       //convert big object to array to store in MongoDB
        $this->mongo_db->insert('contrats', (array)$contrat); 
    
    之后:

       $data=Array();
       $data['identifier']='123' //set an id so I can query by
       $data['contract']=serialize($contract);
       $this->mongo_db->insert('contrats',$data);
    
    数据恢复非常简单-
    unserialize($row->contract)
    返回我需要的对象

    这种在Mongo中存储临时数据的方法变得很简单,我只需要设置一个标识符来查找契约并序列化大对象