【发布时间】:2020-04-14 00:24:21
【问题描述】:
这是登录脚本,当我登录时,我应该被定向到控制器仪表板。但是重定向不起作用。我使用 codeigniter 和最新版本的 xampp。
function do_login()
{
$username = $_POST["username"];
$password = $_POST["password"];
$cek = $this->m_login->cek_user($username,md5($password));
if(count($cek) == 1){ //cek data berdasarkan username & pass
foreach ($cek as $cek) {
$level = $cek['level'];
$nama = $cek['nama_mhs'];
$nim = $cek['nim'];
$id_user = $cek['id_user'];
}
$all_userdata = $this->session->set_userdata(array(
'isLogin' => TRUE,
'uname' => $username,
'nama' => $nama,
'nim' => $nim,
'lvl' => $level,
'id_user' => $id_user,
));
$_SESSION['isLogin'] = TRUE;
$_SESSION['uname'] = $username;
$_SESSION['nama'] = $nama;
$_SESSION['lvl'] = $level;
$_SESSION['id_user'] = $id_user;
$_SESSION['nim'] = $nim;
print_r($this->session->all_userdata());
redirect('dashboard','refresh');
}else{ //jika data tidak ada yng sama dengan database
echo "<script>alert('Gagal Login!')</script>";
redirect('login','refresh');
}
}
【问题讨论】:
-
删除重定向前的
print_r()和echo。重定向请求时,总是确保在它之前没有输出。没有任何。甚至没有空格或换行符。 -
警告! 不要使用 md5 进行密码散列! The manual 甚至声明:“警告 - 由于此散列算法的快速特性,不建议使用此功能来保护密码”。您应该使用 PHP 的 password_hash() 来创建安全散列。然后你可以使用password_verify() 来根据哈希验证密码。
-
谢谢,但我应该回应什么?
-
你有什么错误吗?
-
你不应该回应任何东西。就像我说的:“总是确保它之前没有输出。从来没有。甚至没有空格或换行符”。如果你回显某些东西,它就是一个输出。重定向作为标头发送到客户端。标头在内容之前发送。如果您回显某些内容(这是一个输出),则会先发送标头,然后再发送输出。这意味着您不能在之后添加更多标头(例如位置(重定向)标头)。而且由于您告诉浏览器重定向,所以输出内容没有意义。
标签: php codeigniter authentication redirect codeigniter-3