Berikut ini adalah cara mudah untuk mencegah user login lebih dari sekali. Kita akan membuatnya sebagai behavior sehinggah bisa dipakai di banyak aplikasi. Sebelum kita mulai, ada beberapa prasarat yang harus dipenuhi.
1. Komponen session harus diset ke custom storage. Salah satu contohnya adalah DbSession.
2. Komponen cache juga harus aktif dan persisten. Untuk alasan kemudahan aja sih. Jadi kita simpan session id dari user di cache.

Jika kedua syarat tersebut sudah terpenuhi. Kita melangkah ke tahap berikutnya yaitu membuat behaviornya. Berikut adalah source-nya

Jika sudah, maka berikutnya kita mengattach behavior tersebut ke komponen user. Kita set di konfig

    'components' => [
        'user' => [
            'identityClass' => 'app\models\ar\User',
            'loginUrl' => ['user/login'],
            'enableAutoLogin' => true,
            'as loginOnce' => [  // <- bagian ini yg penting
                'class' => 'app\classes\LoginOnce', 
            ]
        ],

Selesai.
User kita tidak akan diperbolehkan lagi login dua kali dari browser yang berbeda.

Catatan: Menutup browser tidak serta merta dianggap sebagai logout. Logout hanya dikira ketika session sudah timeout atau ketika kita mengklik tombol logout.

Untuk demonya silakan login di http://goo.gl/1u0nZ0. Jika belum punya user, silakan lakukan sign up lebih dahulu.

Advertisements