现在我不知道如何在用户选择要映射的列时保存数据而不保存到表中。我该怎么办?我应该把整个数组放在一个隐藏的字段中吗?请建议。
您可以将它们存储在会话变量中,这样您存储的任何内容都会为每个用户单独保留,直到该用户注销或您的代码的某些部分明确删除它。(比如说,在您丢弃或永久保存数据库上的数据之后)。
希望您已经在使用会话,现在看看php.net 上的会话变量
注意:我从未使用过 codeigniter,但快速搜索显示它包含一个用于管理会话的类,在 FlashData 下查看,这似乎是执行此操作的“codeigniter 方式”。
编辑:
Codeigniter 会话变量有 4KB 的限制,这对您来说可能足够,也可能不够。如果不是,您总是使用以下替代方法之一:
使用数据库存储数据,并在会话变量中存储一些项目 id 和用户 id 以便能够检索它。
使用文件,您可以生成一个随机名称并将其存储在会话变量中,然后将您需要的任何内容存储在文件中。
如果您无法处理会话的结束,您可以将过期日期存储在数据库中并通过编程任务(您可以使用 crons 吗?)从临时表(或文件)中删除过期项目。
虽然,小心!我不知道codeigniter的安全性......但是,有一些风险。您可能希望添加一个隐藏的“令牌”字段,该字段具有与数据库表中的用户关联的随机唯一值以及与会话生命周期相匹配的到期日期。您应该在每次发送表单时创建一个新令牌,并在收到它后验证提交表单中的令牌是否与数据库中用户(由会话标识)的有效令牌匹配,如果是,则删除令牌并继续处理表格的其余部分。如果令牌不匹配或不再有效,则会话已过期,有人一直在弄乱 cookie,或者您在攻击中幸存下来(有人使用旧令牌重新创建帖子的情况)。
我再说一遍,我不知道代码编辑器的安全性。但如果我是那个框架的作者,它已经实现了令牌......所以,这个安全风险很可能已经被覆盖了。
您可以在 OWASP 了解有关跨站点请求伪造的更多信息。