我有一个 CodeIgniter 脚本,用户被重定向到一个表单并返回,返回后,仅 1 次某些内容(使用外部 API 的金融交易)应发送给用户。
首先,我所做的只是标记它是否已完成(UPDATE table SET Completed = 1 WHERE id = X
)
在发送之前,我检查了 if(intval($completed) === 1){//STOP SENDING}
。
但后来我想,如果他们打开页面多次太快(意外或手动或使用其他方法)怎么办,所以这就是我所做的:
提问方式:
我在数据库中添加了一个新表,使用唯一键(订单 ID),在将东西发送给用户之前,我在该表中插入一行(如果已插入)(我检查 CodeIgniter 的 $this-> db->affected_rows() > 0
) 我发送它,如果没有(重复的唯一键防止插入多次),那么我停止发送。
Is this approach okay to make sure it won't be sent twice to the user?
编辑:
抱歉,如果我不够清楚,我谈论的这件事(应该只发送给用户一次)不是一条消息,而是使用另一个 API 发送给用户的某种金融交易。
最佳答案
如果您希望有一个仅在用户下次进入页面时存在的变量,您最好使用flashdata
:
CodeIgniter supports “flashdata”, or session data that will only be available for the next request, and is then automatically cleared.
codeigniter 2 和 codeigniter 3 都支持:
// set data
$this->session->set_flashdata('item', 'value');
// get data
$this->session->flashdata('item');
关于php - 这种方法可以防止重复操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682519/