Sadece Codeigniter içinde kullanıcılar giriş belirli sayfaları kısıtlamak için en iyi yöntem nedir?

0 Cevap php

Benim web sitesi için bir işaret-up ve giriş oluşturduk ve tüm doğrulama kaydolma ve giriş hem de gayet iyi çalışıyor. Kullanıcı geçerli kimlik bilgileri sağladıktan sonra o / o Sitemize first_name son_ad .. temelde ilk ad ve soyad veritabanından yakaladı diyor bir karşılama mesajı ile üye alana kaydedilir.

Ben yapmak istediğim herhangi sadece kullanıcılar giriş üye alanını kısıtlamak olduğunu. Ben onlar yönlendirilmesi gereken karar hiç bir başkasının ya da giriş sayfasına ya da nereye Anasayfa yönlendirileceksiniz.

Benim veritabanında bir tablo "ci_sessions" saklanır ci_sessions kullanın. Session_id, ip_address, user_agent, last_activity ve user_data sütunlar vardır. Yani ben bazı güvenlik formu formun yerine yalnız kullanıcıların tarayıcı saklanan bir çerez daha var var sanırım.

Neyse şimdi benim web sitesi üye alanı örneğin erişmek için ayrı oturum açmış kullanıcılar dan başkasının durdurmak için http://mysite.com/member_area Ben üye alanı için benim denetleyicisi deyimi ise bir basit kullanım:

if (! $this->session->userdata('first_name'))
    {
    redirect('login');
}

Bu üye alan sayfaya erişmek için çalışıyor kişi böyle bir FIRST_NAME olarak benim ci_sessions tabloda user_data depolanan verilerin bir tür vardır ve bu yüzden onları sayfa anlamını erişim sağlar eğer oturum açmış olması gerekir olup olmadığını görmek için denetler ve hala var Etkin bir oturumu.

Hiçbir şey veritabanında bulunursa bunlar giriş sayfasını web sitelerine yönlendirilen. Bunu yapmanın daha iyi bir yolu varsa ne ben bilmek istiyorum? Ben şimdi bunu yapıyorum yolu yeterince güvenli mi?

Aşağıda benim modeli kodu:

<?php
class Current_User {

    private static $user;

    private function __construct() {}

    public static function user() {

        if(!isset(self::$user)) {

            $CI =& get_instance();
            $CI->load->library('session');

            if (!$user_id = $CI->session->userdata('user_id')) {
                return FALSE;
            }

            if (!$u = Doctrine::getTable('User')->find($user_id)) {
                return FALSE;
            }

            self::$user = $u;
        }

        return self::$user;
    }


    public static function login($email, $password) {

        // get User object by email
        if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {


            // to ge the mutated version of the input password
            $u_input = new User();
            $u_input->password = $password;

            // password match
            if ($u->password == $u_input->password) {


                $CI =& get_instance();
                $CI->load->library('session');
                $CI->session->set_userdata('user_id',$u->id);
                $CI->session->set_userdata('username',$u->username);
                $CI->session->set_userdata('first_name',$u->first_name);
                $CI->session->set_userdata('last_name',$u->last_name);

                self::$user = $u;

                return TRUE;
            }

            unset($u_input);
        }

        // login failed
        return FALSE;

    }


    public function __clone() {
        trigger_error('No duplicates allowed.', E_USER_ERROR);
    }

}

Tüm tavsiye takdir edilmektedir.

GÜNCELLEME

Nasıl benim modeli için bu ekleme hakkında

$CI->session->set_userdata('logged_in', 'TRUE');

This basically adds "logged_in" to my user data in session in DB with the value "TRUE". in my controller for my "member area" I have edited the if statement to say this:

if (! $this->session->userdata('logged_in')==TRUE)
{
redirect('login');

}

Madde yoksa "bir kullanıcı oturum değilse değil hangi" FALSE iade edilecek ve kullanıcı giriş sayfasını yönlendirileceksiniz

Sen ne düşünüyorsun?

ya ben bile örneğin dsb453rerfksdhbdsks322 gibi DOĞRU şey gizli yapabiliriz. Rastgele bir şey.

0 Cevap