CodeIgniter Forums
Problem with CI4 session - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: CodeIgniter 4 (https://forum.codeigniter.com/forumdisplay.php?fid=28)
+--- Forum: CodeIgniter 4 Support (https://forum.codeigniter.com/forumdisplay.php?fid=30)
+--- Thread: Problem with CI4 session (/showthread.php?tid=75055)



Problem with CI4 session - webdevron - 12-15-2019

Do not know why, the session in the constructor is not working but in other method. Help me to find this out. Thanks in advance.

PHP Code:
<?php

namespace App\Controllers;

class 
Manage extends BaseController
{

 protected 
$session;

 public function 
__construct(){
     
$this->session = \Config\Services::session();
     if( !
$this->session->has('isCnProL') ) return redirect()->to(base_url('login')); // Not working
 
}

 public function 
new_post()
 {
     if( !
$this->session->has('isCnProL') ) return redirect()->to(base_url('login')); // Working
     
$this->manageView('post-new');
 } 



RE: Problem with CI4 session - InsiteFX - 12-15-2019

I load my session in the BaseController like below and it works just fine.

Add a:

PHP Code:
use Config\Services


PHP Code:
// Ensure that the session is started and running
if (session_status() == PHP_SESSION_NONE)
{
    $this->session Services::session();


By the way I use the session files driver and save my sessions to the writable folder.


RE: Problem with CI4 session - webdevron - 12-15-2019

Now I am loading session in my BaseController.

PHP Code:
<?php

namespace App\Controllers;
use 
CodeIgniter\Controller;

class 
BaseController extends Controller
{
    protected 
$session;

    public function 
initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
        
parent::initController($request$response$logger);
        if (
session_status() == PHP_SESSION_NONE)
        {
            
$this->session = new Config\Services::session();
        } 
    }



Then in my Controller. But still the same result.

PHP Code:
<?php

namespace App\Controllers;

class 
Manage extends BaseController
{
    public function 
initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger){
        
parent::initController($request$response$logger);
        if( !
$this->session->has('isCnProL') ) return redirect()->to(base_url('login')); // NOT WORKING
    
}

    public function 
new_post()
    {
    
    if( !$this->session->has('isCnProL') ) return redirect()->to(base_url('login')); // THIS IS WORKING
    
    $this->manageView('post-new');
    }




RE: Problem with CI4 session - InsiteFX - 12-16-2019

You do not need the initController in a regular controller it is inherited from the
BaseController, as long as you extend your controllers from BaseController.

Just load your session in the BaseController then access the session in any method.


RE: Problem with CI4 session - InsiteFX - 12-16-2019

BaseController:

PHP Code:
<?php
namespace App\Controllers;

/**
 * Class BaseController
 *
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 * Extend this class in any new controllers:
 *     class Home extends BaseController
 *
 * For security be sure to declare any new methods as protected or private.
 *
 * @package CodeIgniter
 */

use CodeIgniter\Controller;
use 
CodeIgniter\HTTP\RequestInterface;
use 
CodeIgniter\HTTP\ResponseInterface;
use 
Config\Services;
use 
Psr\Log\LoggerInterface;

/**
 * Class BaseController
 *
 * @package App\Controllers
 */
class BaseController extends Controller
{
    /**
     * @var array - For view data
     */
    protected $data = array(); // parameters for view components

    /**
     * An array of helpers to be loaded automatically upon
     * class instantiation. These helpers will be available
     * to all other controllers that extend BaseController.
     *
     * @var array
     */
    
protected $helpers = [
    
    'utility'
    ];

    /**
     * @var string - Holds the session instance
     */
    protected $session;

    /**
     * Constructor.
     */
    
public function initController(RequestInterface $requestResponseInterface $responseLoggerInterface $logger)
    {
        
// Do Not Edit This Line
        
parent::initController($request$response$logger);

        
//--------------------------------------------------------------------
        // Preload any models, libraries, etc, here.
        //--------------------------------------------------------------------
        // E.g.:
        // $this->session = \Config\Services::session();

        // Ensure that the session is started and running
        if (session_status() == PHP_SESSION_NONE)
        {
            $this->session Services::session();
        }
    }

    
// -------------------------------------------------------------------

}   // End of BaseController Class.

/**
 * -----------------------------------------------------------------------
 * Filename: BaseController.php
 * Location: ./app/Controllers/BaseController.php
 * -----------------------------------------------------------------------
 */ 

Create new Test Controller:

PHP Code:
<?php namespace App\Controllers;

/**
 * Class Test
 *
 * @package App\Controllers
 */
class Test extends BaseController
{
    /**
     * Class properties go here.
     * -------------------------------------------------------------------
     * public, private, protected, static and const.
     */


    /**
     * __construct ()
     * --------------------------------------------------------------------
     *
     * Constructor
     *
     * NOTE: Not needed if not setting values or extending a Class.
     *
     */
    public function __construct()
    {

    }

    // -------------------------------------------------------------------

    /**
     * index ()
     * -------------------------------------------------------------------
     *
     */
    public function index()
    {
        $newdata = [
            'username'  => 'johndoe',
            'email'     => '[email protected]',
            'logged_in' => TRUE
        
];

        session()->set($newdata);

        return view('welcome_message');
    }

    // --------------------------------------------------------------------

}   // End of Test Controller Class.

/**
 * -----------------------------------------------------------------------
 * Filename: Test.php
 * Location: ./app/Controllers/Test.php
 * -----------------------------------------------------------------------
 */ 

Add this to the bottom of Views welcome_message.php

PHP Code:
<p>
 
  <?= session('username');?>
   <?= session('email');?>
   <?= session('Logged_in');?>
</p> 

You will see that sessions do work.


RE: Problem with CI4 session - asepma - 04-24-2020

please help.

i have a libary code like bellow

libarary

<?php namespace App\Libraries\Mylibrary;

class Mylibrary{

function hitung(){
$angka = 2;
return $angka;
}
}

controller :

<?php namespace App\Controllers;

use App\Libraries\Mylibrary;

class Home extends BaseController
{

function sesi(){

$this->session->set('abc','item');
if ($this->session->get('abc')!='item') {
echo "string";
}else{
echo "strong";
}

echo hitung();
}
}

the error

Call to undefined function App\Controllers\hitung()

thanks.


RE: Problem with CI4 session - InsiteFX - 04-24-2020

PHP Code:
$lib = new Mylibrary();

echo 
$lib->hitung(); 

Or autoload the library.