【发布时间】:2016-06-14 21:23:53
【问题描述】:
我正在学习 Codeigniter 并且我有一个名为 Admin 控制器的控制器
class Admin extends CI_Controller{
/* skipped */
//This function is used to generate changepassword form
public function changepassword(){
$this->data['sessiondata'] = $_SESSION['logged_in'];
$this->data['mainview'] = 'components/admin/changepassword';
$this->load->view($this->layout, $this->data);
}
//changepassword form will be submitted to this function ('admin/checkpassword')
public function checkpassword(){
$error = array(
'required' => '%s tidak boleh kosong',
'matches' => '%s tidak sama, dumb ass'
);
/* some validations skipped */
if($this->form_validation->run($this) == FALSE){
$this->data['mainview'] = 'components/admin/changepassword';
$this->load->view($this->layout, $this->data);
} else {
$tobesent = array(
"oldpassword" => $this->input->post('oldpassword'),
"newpassword" => $this->input->post('newpassword'),
"verifynewpasswprd" => $this->input->post('verifynewpassword')
);
$this->admincrud->changepassword($tobesent);
$this->data['result'] = "Password sukses diubah";
$this->data['mainview'] = 'components/admin/changepassword';
$this->load->view($this->layout, $this->data);
}
}
}
结果是,每次我去base_url('admin/changepassword'),填写提供的表格然后提交表格,我的网址就会从base_url('admin/changepassword')变成base_url('admin/checkpassword'),我知道这是提交表格的结果。此外,每次我直接在地址栏上type base_url('admin/checkpassword') 时,它都会打开表单,我知道这是checkpassword 函数中的 if-else 条件的结果。我的问题是,从安全的角度来看,我可以继续使用这种结构吗?以及如何防止用户直接访问base-url('admin/checkpassword'),而是将他们重定向到base_url('admin/changepassword')?
【问题讨论】:
-
你可以在你的管理控制器的构造器中检查用户是否登录。
-
无法理解。你能给我指点@Drudge 的例子吗?
-
其实,我不清楚你的问题。两种方法的视图是否相同?
-
修改密码函数加载修改密码表单,检查密码函数处理从修改密码函数提交的表单。它们都构建在同一个类中。
-
我知道它们是在同一个类中构建的。我的问题是“他们(功能)是否加载相同的视图??”
标签: php forms codeigniter