Codeigniter:如何处理到控制器/功能/参数的直接链接?

时间:2010-04-06 18:35:10

标签: codeigniter controller

我有一个简单的控制器功能,它删除一个DB条目(它使用模型函数来执行此操作)。我在我的一个视图中有一个链接(例如http://www.example.com/item/delete/3),我正在使用jQuery显示确认对话框,以确保用户真的想要删除它。一切都很好。但是,如果您只是在浏览器中输入该URL,则会删除该项目而不会发出警告。

有没有办法以编码控制器功能或模型的方式处理这个问题?

4 个答案:

答案 0 :(得分:0)

您可以通过将此行添加到模型和控制器文件(CI Forum post)的顶部来防止这种情况。

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class SomeModel extends Model
{
// model code
}
?>

这可确保CI已加载。

答案 1 :(得分:0)

我想我想出来了,那就是让控制器中的函数变为私有,即

function _delete($id) {
 ...delete code goes here...
}

答案 2 :(得分:0)

这是通过AJAX请求吗?如果是这样,我会通过POST而不是GET将数据发送到删除,因此无法直接导航到它。

如果是通过GET,我想联系点击时会发出确认警告,当你直接进入页面时我会加载它。

您还可以检查引荐来源,并且仅在引用页有效的情况下使用它,但此方法并非总是100%可靠。

答案 3 :(得分:0)

对于删除操作,我会做一个HTTP帖子。

function delete()
{
    if ($id = $this->input->post('id'))
    {
        $this->item_model->delete_item($id);
    }
}

然后我的JQuery会做一个HTTP帖子。

$.ajax({
    type: 'POST',
    url: 'item/delete',
    data: {id:item_id}
});

这样,客户端就无法通过浏览网页浏览器中的URL来意外删除项目。