Tutorial Membuat Login Menggunakan CodeIgniter

Terakhir diupdate: 20 Maret 2025

CodeIgniter bisa membantu kamu untuk membuat login dengan panduan yang mudah dibawah ini, yuk pelajari panduan lengkap dibawah ini dengan benar ya.

STEP 1. Buat database kamu dengan nama sobatjagoan

STEP 2. buat table dengan nama admin, berisikan 3 kolom yang terdiri dari id, username, password. Atau kalian bisa import sql dibawah ini, beri nama database dengan nama sobatjagoan terlebih dulu.

Sebagai contoh awal, password yang digunakan adalah ‘sobatjagoan.com’

STEP 3. Aktifkan library database, untuk menggunakan fungsi-fungsi database yang disediakan codeIgniter.

STEP 4. Aktifkan library session, untuk session dilogin.

STEP 5. Lalu aktifkan juga set encryption key session codeIgniter, sebagai contoh diberi nama ‘tutoriallogincodeigniterwwwsobatjagoancom’

				
					$config['encryption_key'] = 'tutoriallogincodeigniterwwwsobatjagoancom';
				
			

STEP 6. Jangan lupa aktifin juga helper url, seperti berikut

				
					$autoload['helper'] = array('url');
				
			

STEP 7. Isi database di autoload library, seperti dibawah ini

				
						$autoload['libraries'] = array('database','session');
				
			

STEP 8. Jangan lupa hubungkan codeIgniter kamu dengan MySQL seperti tutorial yang sebelumnya kita bahas. application/config/config.php

				
					'hostname' => 'localhost',

'username' => 'root',

'password' => 'xxx',

'database' => 'sobatjagoan'
				
			

Cara Membuat Form Login dengan CodeIgniter

STEP 1. Buat sebuah controller dengan nama login.php yang akan menampilkan form login dan melakukan verifikasi/authentikasi username dan password admin yang dimasukkan, dan juga fungsi logout. Melalui application/controllers/login.php

				
					<?php

class Login extends CI_Controller{

function __construct(){

parent::__construct();

$this->load->model('m_login');

}

function index(){

$this->load->view('v_login');

}


function aksi_login(){

$username = $this->input->post('username');

$password = $this->input->post('password');

$where = array(

'username' => $username,

'password' => md5($password)

);

$cek = $this->m_login->cek_login("admin",$where)->num_rows();

if($cek > 0){

$data_session = array(

'nama' => $username,

'status' => "login"

);

$this->session->set_userdata($data_session);

redirect(base_url("admin"));

}else{

echo "Username dan password salah !";

}

}


function logout(){

$this->session->sess_destroy();

redirect(base_url('login'));

}

}
				
			

STEP 2. Buat view dengan nama v_login. Kita akan membuat form login di file view v_login, dan beri nama dengan v_login.php. Kamu bisa melalui application/views/v_login.php

				
					<!DOCTYPE html>

<html>

<head>

<title>Membuat Login Dengan CodeIgniter | www.sobatjagoan.com</title>

</head>

<body>

<h1>Membuat Login Dengan CodeIgniter <br/> www.sobatjagoan.com</h1>

<form action="<?php echo base_url('login/aksi_login'); ?>" method="post">

<table>

<tr>

<td>Username</td>

<td><input type="text" name="username"></td>

</tr>

<tr>

<td>Password</td>

<td><input type="password" name="password"></td>

</tr>

<tr>

<td></td>

<td><input type="submit" value="Login"></td>

</tr>

</table>

</form>

<script id="perfmatters-delayed-scripts-js">(function(){window.pmDC=1;window.pmDT=10;if(window.pmDT){var e=setTimeout(d,window.pmDT*1e3)}const t=["keydown","mousedown","mousemove","wheel","touchmove","touchstart","touchend"];const n={normal:[],defer:[],async:[]};const o=[];const i=[];var r=false;var a="";window.pmIsClickPending=false;t.forEach(function(e){window.addEventListener(e,d,{passive:true})});if(window.pmDC){window.addEventListener("touchstart",b,{passive:true});window.addEventListener("mousedown",b)}function d(){if(typeof e!=="undefined"){clearTimeout(e)}t.forEach(function(e){window.removeEventListener(e,d,{passive:true})});if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",s)}else{s()}}async function s(){c();u();f();m();await w(n.normal);await w(n.defer);await w(n.async);await p();document.querySelectorAll("link[data-pmdelayedstyle]").forEach(function(e){e.setAttribute("href",e.getAttribute("data-pmdelayedstyle"))});window.dispatchEvent(new Event("perfmatters-allScriptsLoaded")),E().then(()=>{h()})}function c(){let o={};function e(t,e){function n(e){return o[t].delayedEvents.indexOf(e)>=0?"perfmatters-"+e:e}if(!o[t]){o[t]={originalFunctions:{add:t.addEventListener,remove:t.removeEventListener},delayedEvents:[]};t.addEventListener=function(){arguments[0]=n(arguments[0]);o[t].originalFunctions.add.apply(t,arguments)};t.removeEventListener=function(){arguments[0]=n(arguments[0]);o[t].originalFunctions.remove.apply(t,arguments)}}o[t].delayedEvents.push(e)}function t(t,n){const e=t[n];Object.defineProperty(t,n,{get:!e?function(){}:e,set:function(e){t["perfmatters"+n]=e}})}e(document,"DOMContentLoaded");e(window,"DOMContentLoaded");e(window,"load");e(document,"readystatechange");t(document,"onreadystatechange");t(window,"onload")}function u(){let n=window.jQuery;Object.defineProperty(window,"jQuery",{get(){return n},set(t){if(t&&t.fn&&!o.includes(t)){t.fn.ready=t.fn.init.prototype.ready=function(e){if(r){e.bind(document)(t)}else{document.addEventListener("perfmatters-DOMContentLoaded",function(){e.bind(document)(t)})}};const e=t.fn.on;t.fn.on=t.fn.init.prototype.on=function(){if(this[0]===window){function t(e){e=e.split(" ");e=e.map(function(e){if(e==="load"||e.indexOf("load.")===0){return"perfmatters-jquery-load"}else{return e}});e=e.join(" ");return e}if(typeof arguments[0]=="string"||arguments[0]instanceof String){arguments[0]=t(arguments[0])}else if(typeof arguments[0]=="object"){Object.keys(arguments[0]).forEach(function(e){delete Object.assign(arguments[0],{[t(e)]:arguments[0][e]})[e]})}}return e.apply(this,arguments),this};o.push(t)}n=t}})}function f(){document.querySelectorAll("script[type=pmdelayedscript]").forEach(function(e){if(e.hasAttribute("src")){if(e.hasAttribute("defer")&&e.defer!==false){n.defer.push(e)}else if(e.hasAttribute("async")&&e.async!==false){n.async.push(e)}else{n.normal.push(e)}}else{n.normal.push(e)}})}function m(){var o=document.createDocumentFragment();[...n.normal,...n.defer,...n.async].forEach(function(e){var t=e.getAttribute("src");if(t){var n=document.createElement("link");n.href=t;if(e.getAttribute("data-perfmatters-type")=="module"){n.rel="modulepreload"}else{n.rel="preload";n.as="script"}o.appendChild(n)}});document.head.appendChild(o)}async function w(e){var t=e.shift();if(t){await l(t);return w(e)}return Promise.resolve()}async function l(t){await v();return new Promise(function(e){const n=document.createElement("script");[...t.attributes].forEach(function(e){let t=e.nodeName;if(t!=="type"){if(t==="data-perfmatters-type"){t="type"}n.setAttribute(t,e.nodeValue)}});if(t.hasAttribute("src")){n.addEventListener("load",e);n.addEventListener("error",e)}else{n.text=t.text;e()}t.parentNode.replaceChild(n,t)})}async function p(){r=true;await v();document.dispatchEvent(new Event("perfmatters-DOMContentLoaded"));await v();window.dispatchEvent(new Event("perfmatters-DOMContentLoaded"));await v();document.dispatchEvent(new Event("perfmatters-readystatechange"));await v();if(document.perfmattersonreadystatechange){document.perfmattersonreadystatechange()}await v();window.dispatchEvent(new Event("perfmatters-load"));await v();if(window.perfmattersonload){window.perfmattersonload()}await v();o.forEach(function(e){e(window).trigger("perfmatters-jquery-load")})}async function v(){return new Promise(function(e){requestAnimationFrame(e)})}function h(){window.removeEventListener("touchstart",b,{passive:true});window.removeEventListener("mousedown",b);i.forEach(e=>{if(e.target.outerHTML===a){e.target.dispatchEvent(new MouseEvent("click",{view:e.view,bubbles:true,cancelable:true}))}})}function E(){return new Promise(e=>{window.pmIsClickPending?g=e:e()})}function y(){window.pmIsClickPending=true}function g(){window.pmIsClickPending=false}function L(e){e.target.removeEventListener("click",L);C(e.target,"pm-onclick","onclick");i.push(e),e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();g()}function b(e){if(e.target.tagName!=="HTML"){if(!a){a=e.target.outerHTML}window.addEventListener("touchend",A);window.addEventListener("mouseup",A);window.addEventListener("touchmove",k,{passive:true});window.addEventListener("mousemove",k);e.target.addEventListener("click",L);C(e.target,"onclick","pm-onclick");y()}}function k(e){window.removeEventListener("touchend",A);window.removeEventListener("mouseup",A);window.removeEventListener("touchmove",k,{passive:true});window.removeEventListener("mousemove",k);e.target.removeEventListener("click",L);C(e.target,"pm-onclick","onclick");g()}function A(e){window.removeEventListener("touchend",A);window.removeEventListener("mouseup",A);window.removeEventListener("touchmove",k,{passive:true});window.removeEventListener("mousemove",k)}function C(e,t,n){if(e.hasAttribute&&e.hasAttribute(t)){event.target.setAttribute(n,event.target.getAttribute(t));event.target.removeAttribute(t)}}})();(function(){var e,a,s;function t(){(e=document.createElement("span")).id="elementor-device-mode",e.setAttribute("class","elementor-screen-only"),document.body.appendChild(e),requestAnimationFrame(n)}function n(){a=o(getComputedStyle(e,":after").content.replace(/"/g,"")),document.querySelectorAll(".elementor-invisible[data-settings]").forEach(e=>{let t=e.getBoundingClientRect();if(t.bottom>=0&&t.top<=window.innerHeight)try{i(e)}catch(e){}})}function i(e){let t=JSON.parse(e.dataset.settings),n=t._animation_delay||t.animation_delay||0,i=t[a.find(e=>t[e])];if("none"===i)return void e.classList.remove("elementor-invisible");e.classList.remove(i),s&&e.classList.remove(s),s=i;let o=setTimeout(()=>{e.classList.remove("elementor-invisible"),e.classList.add("animated",i),l(e,t)},n);window.addEventListener("perfmatters-startLoading",function(){clearTimeout(o)})}function o(e="mobile"){let n=[""];switch(e){case"mobile":n.unshift("_mobile");case"tablet":n.unshift("_tablet");case"desktop":n.unshift("_desktop")}let i=[];return["animation","_animation"].forEach(t=>{n.forEach(e=>{i.push(t+e)})}),i}function l(e,t){o().forEach(e=>delete t[e]),e.dataset.settings=JSON.stringify(t)}document.addEventListener("DOMContentLoaded",t)})();</script></body>

</html>
				
			

STEP 3. Setelah itu kamu akan mendapatakan data username dan password, lalu masukkan ke dalam array, dan akan dikirim lagi ke model m_login

				
					function aksi_login(){

    $username = $this->input->post('username');
    $password = $this->input->post('password');

    $where = array(
            'username' => $username,
            'password' => md5($password)
    );
    

    $cek = $this->m_login->cek_login("admin",$where)->num_rows();

    if($cek > 0){

    $data_session = array(
            'nama' => $username,
            'status' => "login"
    );

    $this->session->set_userdata($data_session);
    redirect(base_url("admin"));
    }else{
    echo "Username dan password salah !";

    }
}
				
			

STEP 4. Cek ketersediaan username dan password di model m_login. Fungsi num_rows() untuk menghitung jumlah record.

				
					$cek = $this->m_login->cek_login("admin",$where)->num_rows();
				
			

STEP 5. Buat sebuah model dengan nama m_login.php melalui application/models/m_login.php

				
					<?php

class M_login extends CI_Model{
    function cek_login($table,$where){
        return $this->db->get_where($table,$where);
        }
}
				
			

STEP 6. Cek hasil dari tutorial diatas dengan seperti ini

				
					if($cek > 0){
    $data_session = array(
        'nama' => $username,
        'status' => "login"
);

$this->session->set_userdata($data_session);

    redirect(base_url("admin"));

}else{

     echo "Username dan password salah !";

}
				
			

Jika username dan password ditemukan atau benar seperti dibawah ini, lakukan hal berikut :

STEP 7. Kamu langsung masuk aja ke controller admin.

STEP 8. Buat session nama yang berisikan username tadi. Lalu buat session status berisi ‘login’

Jika username dan password tidak ditemukan atau salah, maka akan muncul pesan “username dan password salah !” pada halaman kamu.

STEP 9. Buat sebuah controller dengan nama admin.php. Melalui application/controllers/admin.php

				
					<?php

class Admin extends CI_Controller{

    function __construct(){
        parent::__construct();
        if($this->session->userdata('status') != "login"){
            redirect(base_url("login"));
        }
     }

    function index(){
     $this->load->view('v_admin');

    }
}
				
			

Untuk membuat halaman admin, perhatikan fungsi index di controller admin.php

STEP 1. Buat vew baru dengan nama v_admin.php pada halaman admin, melalui application/view/v_admin.php

				
					<!DOCTYPE html>

<html>

<head>

 <title>Membuat login dengan codeigniter | www.sobatjagoan.com</title>

</head>

<body>

     <h1>Login berhasil !</h1>

    <h2>Hai, <?php echo $this->session->userdata("nama"); ?></h2>

    <a href="<?php echo base_url('login/logout'); ?>">Logout</a>

</body>

</html>
				
			

STEP 2. Buat tombol atau link logout, jadi kalau kamu klik tombolnya maka akan dialihkan pada fungsi logout pada controller login

				
					unction logout(){
    $this->session->sess_destroy();
    redirect(base_url('login'));
}
				
			

Fungsi dari:

				
						$this->session->sess_destroy();
				
			

Yaitu untuk menghapus semua session dan login menggunakan codeIgniter selesai. Sekarang kamu bisa cek dari hasil panduan diatas yang kamu pelajari

 

Nah, ternyata gampang kan, Yuk simak terus Tips Hosting di halaman tutorial Jagoan Hosting Indonesia ya, jika ada bagian dari tutorial yang tidak ditemukan, kamu bisa menghubungi teman-teman di Jagoan Hosting supaya bisa dibantu lebih lanjut melalui Live Chat

Related Posts
Tips Mengatasi Error Undefined Index / Variable

Pengantar Halo sobat Jagoan! di tutorial kali ini kita bakalan membahas permasalahan Error Undefined Index/Variable. Pasti sekarang kamu lagi main-main Read more

Tutorial Mendeteksi Script Jahat pada Website Sebelum Publish

Hai, Sob kamu pasti tentu tidak ingin jika website kamu dibobol oleh hacker, terutama jika kamu seorang programmer dan webmaster. Read more

Tutorial Install Virus Scanner Clam AV pada cPanel

Kamu ngerasa insecure karena belum install antivirus? Install antivirus emang penting, Sob untuk menjaga performa server kamu. Nah, kamu bisa Read more

Tutorial mereset Password MySQL melalui akses Root

Lupa password root MySQL kamu? Gawat!, tapi kamu gak perlu panik, kita akan bahas bareng tutorialnya berikut ini. Eh, tapi Read more

Scroll To Top