PHP and MySQL help

GT9

Well-known member
  • Jun 22, 2013
    1,564
    167
    63
    [email protected]
    මචංල පොඩි ගැටලුවක් ආව පැය ගානක් ට්‍රයි කරා ගොඩදාගන්න ඒත් බැරි උනා. මේකයි ගැටලුව. මම CI වලින් කලින් හදපු ඇප් එකකට remember me option එක දුන්න. පස්සේ ආපහු ක්ලයින්ට් පොඩි බග් එකක් රිපෝට් කරා.

    මේකයි ගැටලුව මචංල. මම CI වල sessions table එකට custom fields ටිකක් දැම්ම userid, user_agent වගේ.

    ඔය remember me option එක දෙන්න කලින් නෝමල් විදියට username password type කරල නේ ලොග් වෙන්නේ. අන්න ඒ Login form එක සබ්මිට් වෙනකොට අර මම කිව්ව දත්ත දැන් තියෙන session_id එකට අප්ඩේට් කරා. කිස් ගැටලුවක් නෑ ඒකෙදි.

    නමුත් මේ remember me option එකේදි මචං කේස් එකක් තියෙනව. මේකෙදි මචං අපි කලින් වගේ මුලින් login form එක load වෙලා පස්සේ ඒක fill කරල සබ්මිට් කරාමනේ ලොග් වෙන්නේ. මේකෙදි Browser cookie එක රීඩ් කරලනේ session set කරල යූසර්ව ලොග් කරන්නේ. :yes: ඒ කින්නේ මචං එක රික්වෙස්ට් එකකදීම තමයි මේ ඔක්කොම වෙන්නේ :yes: මෙන්න මෙතනයි ගැටලුව. මොකද මේ තනි රික්වෙස්ට් එකේදිම තමයි session_id එකක් අලුතින් db එකේ හැදෙන්නේ. පස්සේ මම ඒක ඒ රික්වෙස්ට් එකේදිම update කරන්න ගියාට අප්ඩේට් වෙන්නෑ. :sorry::sorry::sorry:

    හැබැයි මචං පේජ් එක තව එකපාරක් refresh කරොත් අප්ඩේට් වෙනව. මට ඕන තනි රික්වෙස්ට් එකේදිම අප්ඩේට් කරන්න. හේතුව මම active users ලව කවුන්ට් කරනව. ඉතින් පලවෙනි රික්වෙස්ට් එකේදි පෙන්නන්නෑ. දෙවැනි රික්වේස්ට් එකේදි තමයි පෙන්නන්නේ. ඒකට හේතුව session එකේ මම හදපු ෆීල්ඩ්ස් අප්ඩේට් වෙන්නේ නැති නිසා. මාර අවුල මචං. :sorry:

    ඔන්න ඔතන තමයි මචං ගැටලුව.

    දන්න කෙනෙක් උදව්වක් දෙන්න ලොකු දෙයක්. මම ඊයෙ රෑත් ට්‍රයි කරා කරගන්න බැරි උනා. :sorry:
     

    3rdEye

    Member
    Mar 21, 2014
    4,465
    401
    0
    Code:
    <?php 
    if (!defined('BASEPATH')) exit('No direct script access allowed.');
     /**
     * Remember me Helper
     */
    class Remember_me {
    	function __construct() {
    		$this->loged_user_through_cookies ();
    	}
    	function loged_user_through_cookies() {
    		$CI = & get_instance ();
    		if (! $CI->session->userdata ( 'logged_in' )) {
    			$CI->load->model ( 'login_model', '', TRUE );
    			$CI->load->helper ( 'cookie' );
    			$cookie = get_cookie ( $CI->config->item ( 'remember_cookie_name' ), TRUE );
    			$cookie_data = unserialize ( $cookie );
    			
    			if (isset ( $cookie_data ['key'] ) and isset ( $cookie_data ['user_id'] )) {
    				$usercookie_data = $CI->login_model->get_user_cookie_data ( $cookie_data ['user_id'],  $cookie_data ['key'] );
    				
    				if (count ( $usercookie_data )) {
    					$CI->session->set_userdata ( array ('logged_in' => true,'user_id' => $usercookie_data [0]->user_id,);
    					
    					// Renew users cookie to prevent it from expiring
    					set_cookie ( array ('name' => $CI->config->item ( 'remember_cookie_name' ),
    										'value' => $cookie,
    										'expire' => $CI->config->item ( 'remember_me_cookie_life' ) ) );
    					$CI->login_model->update_userdata_on_login ( $usercookie_data [0]->user_id );
    				}
    			}
    		}
    }

    මේක පොඩ්ඩක් බලපන්..උබේ explain එකෙන් එන්නේ නැහැ හරි idea එකක්...

    $autoload['libraries'] = array('Remember_me');
    ඕකෙදි කරලා තියෙන්නේ Remember_me library එකක් ලියලා auto load කරලා තියෙන්නේ..පලවෙනි request එකේදිම update වේවි

    තව දෙයක්,අනිත් දවසේ CI session table එක edit නොකර කරන දෙයක් කරන්න. Very bad programming ;)
     
    Last edited:
    • Like
    Reactions: GT9

    GT9

    Well-known member
  • Jun 22, 2013
    1,564
    167
    63
    [email protected]
    Code:
    <?php 
    if (!defined('BASEPATH')) exit('No direct script access allowed.');
     /**
     * Remember me Helper
     */
    class Remember_me {
    	function __construct() {
    		$this->loged_user_through_cookies ();
    	}
    	function loged_user_through_cookies() {
    		$CI = & get_instance ();
    		if (! $CI->session->userdata ( 'logged_in' )) {
    			$CI->load->model ( 'login_model', '', TRUE );
    			$CI->load->helper ( 'cookie' );
    			$cookie = get_cookie ( $CI->config->item ( 'remember_cookie_name' ), TRUE );
    			$cookie_data = unserialize ( $cookie );
    			
    			if (isset ( $cookie_data ['key'] ) and isset ( $cookie_data ['user_id'] )) {
    				$usercookie_data = $CI->login_model->get_user_cookie_data ( $cookie_data ['user_id'],  $cookie_data ['key'] );
    				
    				if (count ( $usercookie_data )) {
    					$CI->session->set_userdata ( array ('logged_in' => true,'user_id' => $usercookie_data [0]->user_id,);
    					
    					// Renew users cookie to prevent it from expiring
    					set_cookie ( array ('name' => $CI->config->item ( 'remember_cookie_name' ),
    										'value' => $cookie,
    										'expire' => $CI->config->item ( 'remember_me_cookie_life' ) ) );
    					$CI->login_model->update_userdata_on_login ( $usercookie_data [0]->user_id );
    				}
    			}
    		}
    }

    මේක පොඩ්ඩක් බලපන්..උබේ explain එකෙන් එන්නේ නැහැ හරි idea එකක්...


    ඕකෙදි කරලා තියෙන්නේ Remember_me library එකක් ලියලා auto load කරලා තියෙන්නේ..පලවෙනි request එකේදිම update වේවි

    තව දෙයක්,අනිත් දවසේ CI session table එක edit නොකර කරන දෙයක් කරන්න. Very bad programming ;)


    තෑන්ක්ස් මචං රිප්ලයි එකට. මම මචං කරන්න පුලුවන් හැම දේම කරා පැය 8ක් විතර එකදිගට එක එක විදියට ට්‍රයි කරා :D

    පස්සේ debugging කරද්දි තේරුනා මේක කරන්න බැරි බව. තනි රික්වෙස්ට් එකක අවසානෙදි තමයි සෙශන් රෙකෝඩ් එක db එකට එන්නේ. ඊට කලින් අප්ඩේට් කරන්න හැදුවට බෑ මොකද එහෙම රෙකෝඩ් එකක් නැති නිසා. දෙවැනි රික්වෙස්ට් එකේ ඉදල තමයි කරන දෙයක් කරන්න වෙන්නේ.

    නමුත් සෙශන්ස් ඩේට සෙට් කරන්න පුලුවන් මොකද පළවෙනියටම මෙමරියට ලෝඩ් වෙලා session driver එකෙන් පස්සෙ තමයි අප්ඩේට් කරන්නේ. :(

    මචංගෙ කෝඩ් එකට තෑන්ක්ස් ඔය විදියට සෙශන්ස් ඩේට සෙට් කරන්න පුලුවන් අවුලත් නැතුව :yes::yes::D

    ඒත් මචෝ අවුල තියෙන්නේ මචං කිව්ව වගේ මම ටේබල් එකට කස්ටම් ෆීල්ඩ්ස් කීපයක් දාල තියෙනව ඒව තමයි අප්ඩේට් කරන්න බැරි. මම session driver එක අප්ඩේට් කරාම නම් හරි ගියා නමුත් ඒ එක්ක හැප්පෙන එක හොද නැති නිසා ආපහු රිවට් බැක් කරා.

    මචං කිව්ව එක හරි එහෙම මොඩිෆිකේෂන්ස් හොදනෑ තමයි. මගේ හිතටත් හරි නෑ නමුත් වෙලාවෙ හැටියට පුලුවන් ඉක්මනට දෙන්න උනා. මම දැන් ප්ලෑන් කරල තියෙන්නේ සෙෂන් මෙටා ඩේට වලට වෙනමම ටේබල් එකක් හදල සෙෂන් id එකත් එක්ක join කරන්න. :D:D ලබන මාසෙ විතර අප්ඩේට් එකක් දෙනව. :D

    මචංගෙ වෙලාවට තෑන්ක්ස් :yes::yes::yes::)
     

    3rdEye

    Member
    Mar 21, 2014
    4,465
    401
    0
    තෑන්ක්ස් මචං රිප්ලයි එකට. මම මචං කරන්න පුලුවන් හැම දේම කරා පැය 8ක් විතර එකදිගට එක එක විදියට ට්‍රයි කරා :D

    පස්සේ debugging කරද්දි තේරුනා මේක කරන්න බැරි බව. තනි රික්වෙස්ට් එකක අවසානෙදි තමයි සෙශන් රෙකෝඩ් එක db එකට එන්නේ. ඊට කලින් අප්ඩේට් කරන්න හැදුවට බෑ මොකද එහෙම රෙකෝඩ් එකක් නැති නිසා. දෙවැනි රික්වෙස්ට් එකේ ඉදල තමයි කරන දෙයක් කරන්න වෙන්නේ.

    නමුත් සෙශන්ස් ඩේට සෙට් කරන්න පුලුවන් මොකද පළවෙනියටම මෙමරියට ලෝඩ් වෙලා session driver එකෙන් පස්සෙ තමයි අප්ඩේට් කරන්නේ. :(

    මචංගෙ කෝඩ් එකට තෑන්ක්ස් ඔය විදියට සෙශන්ස් ඩේට සෙට් කරන්න පුලුවන් අවුලත් නැතුව :yes::yes::D

    ඒත් මචෝ අවුල තියෙන්නේ මචං කිව්ව වගේ මම ටේබල් එකට කස්ටම් ෆීල්ඩ්ස් කීපයක් දාල තියෙනව ඒව තමයි අප්ඩේට් කරන්න බැරි. මම session driver එක අප්ඩේට් කරාම නම් හරි ගියා නමුත් ඒ එක්ක හැප්පෙන එක හොද නැති නිසා ආපහු රිවට් බැක් කරා.

    මචං කිව්ව එක හරි එහෙම මොඩිෆිකේෂන්ස් හොදනෑ තමයි. මගේ හිතටත් හරි නෑ නමුත් වෙලාවෙ හැටියට පුලුවන් ඉක්මනට දෙන්න උනා. මම දැන් ප්ලෑන් කරල තියෙන්නේ සෙෂන් මෙටා ඩේට වලට වෙනමම ටේබල් එකක් හදල සෙෂන් id එකත් එක්ක join කරන්න. :D:D ලබන මාසෙ විතර අප්ඩේට් එකක් දෙනව. :D

    මචංගෙ වෙලාවට තෑන්ක්ස් :yes::yes::yes::)[/COLOR][/SIZE]

    ඉතින් Remember me cookie එක හදද්දී cookie key store කර ගත්තා නම් අලුත් column එකක් දාලා...එකෙන් බලන්න පුළුවන්නේ cookie through ලොග් වෙනවා නම් key එක බලලා update කරනවා :rolleyes:
     

    GT9

    Well-known member
  • Jun 22, 2013
    1,564
    167
    63
    [email protected]
    ඉතින් Remember me cookie එක හදද්දී cookie key store කර ගත්තා නම් අලුත් column එකක් දාලා...එකෙන් බලන්න පුළුවන්නේ cookie through ලොග් වෙනවා නම් key එක බලලා update කරනවා :rolleyes:

    ඔය වගේ ජිල්මාට් එකක් තමයි මචං මම දැන් දාල තියෙන්නේ :D ඒකෙන් තමයි පළවෙනි රික්වෙස්ට් එකේදි අප්ඩේට් වෙන්නැති එක කවර් කරගන්නේ. නමුත් වැඩේ ටිකක් මෙසි. නිකන් අටවුපු ගතියක් තියෙන්නේ. :D

    අප්ඩේට් කරනව කිව්වෙ මචං අර මම හදාපු සෙෂන් ටේබල් එකේ කස්ටම් ෆීල්ඩ්ස්ද? බෑ මචං මම ට්‍රයි කරා :sorry:

    හැම පළවෙනි රික්වෙස්ට් එකක් අවසානෙදිම තමයි සෙෂන් එක db එකට අප්ඩේට් වෙන්නේ. දෙවැනි රික්වෙස්ට් එකේ ඉදන්තමයි වැඩ. ඕනනම් රීඩිරෙක්ට් කරන්න පුලුවන් එතකොටත් හරි නමුත් ඒකටත් මම කැමති නෑ. :D
     

    Identity

    Well-known member
  • Aug 15, 2016
    23,192
    18,800
    113
    අදාල නෑනේ
    Laravel wage ekak igena ganna. ochchara code liyanna ona ne

    PHP:
    public function validate() 
    {
        // set the remember me cookie if the user check the box
        $remember = (Input::has('remember')) ? true : false;
    
        // attempt to do the login
        $auth = Auth::attempt(
            [
                'username'  => strtolower(Input::get('username')),
                'password'  => Input::get('password')    
            ], $remember
        );
        if ($ auth) {
            return Redirect::to('home');
        } else {
            // validation not successful, send back to form 
            return Redirect::to('/')
                ->with Input(Input::except('password'))
                ->with('flash_notice', 'Your username/password combination was incorrect.');
        }
    
    }