这种方法可以防止重复行动吗?

时间:2016-09-25 01:16:25

标签: php mysql codeigniter

我有一个CodeIgniter脚本,用户被重定向到表单并返回,返回后,只有一次某些东西(使用外部API的金融交易)应该发送给用户。

首先,我所做的只是完成标记(UPDATE table SET completed = 1 WHERE id = X

在发送之前,我使用if(intval($completed) === 1){//STOP SENDING}进行了检查。

但后来我想如果他们多次打开页面太快(意外或手动或使用其他方法)会怎么样,所以这就是我做的:

问题方法:

我在数据库中添加了一个新表,使用唯一键(订单ID),然后将事物发送给用户我在此表中插入一行(如果已插入)(我使用CodeIgniter' s {{1我发送它,如果没有(复制唯一键阻止多次插入),然后我停止发送。

  

这种做法是否可以确保它不会被发送两次给用户?

编辑:

很抱歉,如果我不够清楚,我谈到的这件事(应该只发送给用户一次)不是消息,它是某种使用其他API发送给用户的金融交易

1 个答案:

答案 0 :(得分:0)

如果您想让变量仅存在于下次用户进入页面,您最好使用flashdata

  

CodeIgniter支持“flashdata”或仅可用于下一个请求的会话数据,然后自动清除。

codeigniter 2和codeigniter 3都支持:

// set data
$this->session->set_flashdata('item', 'value');
// get data
$this->session->flashdata('item');