benedmunds / CodeIgniter-Ion-Auth

Simple and Lightweight Auth System for CodeIgniter
http://benedmunds.com/ion_auth/
MIT License
2.34k stars 1.14k forks source link

Login and redirect problem #1023

Closed jimit-hothi closed 7 years ago

jimit-hothi commented 7 years ago

Hello,

i got one issue in codeigniter and ion_auth

my codeigniter lastet version and ion-auth also

my server php version 5.3.29

so i got issue when i login then redirect dashboard, after go to other controller so i go to login page and other module so also redirect login page

how fix that issue :(

benedmunds commented 7 years ago

Sorry I dont follow. Can you post code examples along with screenshots.

avenirer commented 7 years ago

Most likely you have a sessions problem. Make sure the CI session library is set up correctly.

jimit-hothi commented 7 years ago

@avenirer yeah session problem i set correctly session libraby :(

jimit-hothi commented 7 years ago

@benedmunds

this screen show i login after i can redirect in dashboard and after click other section like assets , kitchenette,facility etc so i go login page how i can fix that ??

jimit-hothi commented 7 years ago

@benedmunds @avenirer

my condig file

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|   http://example.com/
|
| WARNING: You MUST set this value!
|
| If it is not set, then CodeIgniter will try guess the protocol and path
| your installation, but due to security concerns the hostname will be set
| to $_SERVER['SERVER_ADDR'] if available, or localhost otherwise.
| The auto-detection mechanism exists only for convenience during
| development and MUST NOT be used in production!
|
| If you need to allow multiple domains, remember that this file is still
| a PHP script and you can easily do that on your own.
|
*/
$config['base_url'] = '';

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = '';

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'REQUEST_URI' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
| 'QUERY_STRING'   Uses $_SERVER['QUERY_STRING']
| 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
|
| WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
*/
$config['uri_protocol'] = 'REQUEST_URI';

/*
|--------------------------------------------------------------------------
| URL suffix
|--------------------------------------------------------------------------
|
| This option allows you to add a suffix to all URLs generated by CodeIgniter.
| For more information please see the user guide:
|
| https://codeigniter.com/user_guide/general/urls.html
*/
$config['url_suffix'] = '';

/*
|--------------------------------------------------------------------------
| Default Language
|--------------------------------------------------------------------------
|
| This determines which set of language files should be used. Make sure
| there is an available translation if you intend to use something other
| than english.
|
*/
$config['language'] = 'english';

/*
|--------------------------------------------------------------------------
| Default Character Set
|--------------------------------------------------------------------------
|
| This determines which character set is used by default in various methods
| that require a character set to be provided.
|
| See http://php.net/htmlspecialchars for a list of supported charsets.
|
*/
$config['charset'] = 'UTF-8';

/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the 'hooks' feature you must enable it by
| setting this variable to TRUE (boolean).  See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;

/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
| native libraries.  For more information please see the user guide:
|
| https://codeigniter.com/user_guide/general/core_classes.html
| https://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';

/*
|--------------------------------------------------------------------------
| Composer auto-loading
|--------------------------------------------------------------------------
|
| Enabling this setting will tell CodeIgniter to look for a Composer
| package auto-loader script in application/vendor/autoload.php.
|
|   $config['composer_autoload'] = TRUE;
|
| Or if you have your vendor/ directory located somewhere else, you
| can opt to set a specific path as well:
|
|   $config['composer_autoload'] = '/path/to/vendor/autoload.php';
|
| For more information about Composer, please visit http://getcomposer.org/
|
| Note: This will NOT disable or override the CodeIgniter-specific
|   autoloading (application/config/autoload.php)
*/
$config['composer_autoload'] = FALSE;

/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify which characters are permitted within your URLs.
| When someone tries to submit a URL with disallowed characters they will
| get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| The configured value is actually a regular expression character group
| and it will be executed as: ! preg_match('/^[<permitted_uri_chars>]+$/i
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

/*
|--------------------------------------------------------------------------
| Enable Query Strings
|--------------------------------------------------------------------------
|
| By default CodeIgniter uses search-engine friendly segment based URLs:
| example.com/who/what/where/
|
| By default CodeIgniter enables access to the $_GET array.  If for some
| reason you would like to disable it, set 'allow_get_array' to FALSE.
|
| You can optionally enable standard query string based URLs:
| example.com?who=me&what=something&where=here
|
| Options are: TRUE or FALSE (boolean)
|
| The other items let you set the query string 'words' that will
| invoke your controllers and its functions:
| example.com/index.php?c=controller&m=function
|
| Please note that some of the helpers won't work as expected when
| this feature is enabled, since CodeIgniter is designed primarily to
| use segment based URLs.
|
*/
$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
$config['directory_trigger'] = 'd';

/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
|   0 = Disables logging, Error logging TURNED OFF
|   1 = Error Messages (including PHP errors)
|   2 = Debug Messages
|   3 = Informational Messages
|   4 = All Messages
|
| You can also pass an array with threshold levels to show individual error types
|
|   array(2) = Debug Messages, without Error Messages
|
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 4;

/*
|--------------------------------------------------------------------------
| Error Logging Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/logs/ directory. Use a full server path with trailing slash.
|
*/
$config['log_path'] = '';

/*
|--------------------------------------------------------------------------
| Log File Extension
|--------------------------------------------------------------------------
|
| The default filename extension for log files. The default 'php' allows for
| protecting the log files via basic scripting, when they are to be stored
| under a publicly accessible directory.
|
| Note: Leaving it blank will default to 'php'.
|
*/
$config['log_file_extension'] = '';

/*
|--------------------------------------------------------------------------
| Log File Permissions
|--------------------------------------------------------------------------
|
| The file system permissions to be applied on newly created log files.
|
| IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal
|            integer notation (i.e. 0700, 0644, etc.)
*/
$config['log_file_permissions'] = 0644;

/*
|--------------------------------------------------------------------------
| Date Format for Logs
|--------------------------------------------------------------------------
|
| Each item that is logged has an associated date. You can use PHP date
| codes to set your own date formatting
|
*/
$config['log_date_format'] = 'Y-m-d H:i:s';

/*
|--------------------------------------------------------------------------
| Error Views Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/views/errors/ directory.  Use a full server path with trailing slash.
|
*/
$config['error_views_path'] = '';

/*
|--------------------------------------------------------------------------
| Cache Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/cache/ directory.  Use a full server path with trailing slash.
|
*/
$config['cache_path'] = '';

/*
|--------------------------------------------------------------------------
| Cache Include Query String
|--------------------------------------------------------------------------
|
| Whether to take the URL query string into consideration when generating
| output cache files. Valid options are:
|
|   FALSE      = Disabled
|   TRUE       = Enabled, take all query parameters into account.
|                Please be aware that this may result in numerous cache
|                files generated for the same page over and over again.
|   array('q') = Enabled, but only take into account the specified list
|                of query parameters.
|
*/
$config['cache_query_string'] = FALSE;

/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class, you must set an encryption key.
| See the user guide for more info.
|
| https://codeigniter.com/user_guide/libraries/encryption.html
|
*/
$config['encryption_key'] = '';

/*
|--------------------------------------------------------------------------
| Session Variables
|--------------------------------------------------------------------------
|
| 'sess_driver'
|
|   The storage driver to use: files, database, redis, memcached
|
| 'sess_cookie_name'
|
|   The session cookie name, must contain only [0-9a-z_-] characters
|
| 'sess_expiration'
|
|   The number of SECONDS you want the session to last.
|   Setting to 0 (zero) means expire when the browser is closed.
|
| 'sess_save_path'
|
|   The location to save sessions to, driver dependent.
|
|   For the 'files' driver, it's a path to a writable directory.
|   WARNING: Only absolute paths are supported!
|
|   For the 'database' driver, it's a table name.
|   Please read up the manual for the format with other session drivers.
|
|   IMPORTANT: You are REQUIRED to set a valid save path!
|
| 'sess_match_ip'
|
|   Whether to match the user's IP address when reading the session data.
|
|   WARNING: If you're using the database driver, don't forget to update
|            your session table's PRIMARY KEY when changing this setting.
|
| 'sess_time_to_update'
|
|   How many seconds between CI regenerating the session ID.
|
| 'sess_regenerate_destroy'
|
|   Whether to destroy session data associated with the old session ID
|   when auto-regenerating the session ID. When set to FALSE, the data
|   will be later deleted by the garbage collector.
|
| Other session cookie settings are shared with the rest of the application,
| except for 'cookie_prefix' and 'cookie_httponly', which are ignored here.
|
*/
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

/*
|--------------------------------------------------------------------------
| Cookie Related Variables
|--------------------------------------------------------------------------
|
| 'cookie_prefix'   = Set a cookie name prefix if you need to avoid collisions
| 'cookie_domain'   = Set to .your-domain.com for site-wide cookies
| 'cookie_path'     = Typically will be a forward slash
| 'cookie_secure'   = Cookie will only be set if a secure HTTPS connection exists.
| 'cookie_httponly' = Cookie will only be accessible via HTTP(S) (no javascript)
|
| Note: These settings (with the exception of 'cookie_prefix' and
|       'cookie_httponly') will also affect sessions.
|
*/
$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

/*
|--------------------------------------------------------------------------
| Standardize newlines
|--------------------------------------------------------------------------
|
| Determines whether to standardize newline characters in input data,
| meaning to replace \r\n, \r, \n occurrences with the PHP_EOL value.
|
| This is particularly useful for portability between UNIX-based OSes,
| (usually \n) and Windows (\r\n).
|
*/
$config['standardize_newlines'] = FALSE;

/*
|--------------------------------------------------------------------------
| Global XSS Filtering
|--------------------------------------------------------------------------
|
| Determines whether the XSS filter is always active when GET, POST or
| COOKIE data is encountered
|
| WARNING: This feature is DEPRECATED and currently available only
|          for backwards compatibility purposes!
|
*/
$config['global_xss_filtering'] = FALSE;

/*
|--------------------------------------------------------------------------
| Cross Site Request Forgery
|--------------------------------------------------------------------------
| Enables a CSRF cookie token to be set. When set to TRUE, token will be
| checked on a submitted form. If you are accepting user data, it is strongly
| recommended CSRF protection be enabled.
|
| 'csrf_token_name' = The token name
| 'csrf_cookie_name' = The cookie name
| 'csrf_expire' = The number in seconds the token should expire.
| 'csrf_regenerate' = Regenerate token on every submission
| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks
*/

$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_auth';
$config['csrf_cookie_name'] = 'csrf_cookie_auth';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = FALSE;
$config['csrf_exclude_uris'] = array();

/*
|--------------------------------------------------------------------------
| Output Compression
|--------------------------------------------------------------------------
|
| Enables Gzip output compression for faster page loads.  When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
| Only used if zlib.output_compression is turned off in your php.ini.
| Please do not use it together with httpd-level output compression.
|
| VERY IMPORTANT:  If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
| even be a line of whitespace at the end of one of your scripts.  For
| compression to work, nothing can be sent before the output buffer is called
| by the output class.  Do not 'echo' any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;

/*
|--------------------------------------------------------------------------
| Master Time Reference
|--------------------------------------------------------------------------
|
| Options are 'local' or any PHP supported timezone. This preference tells
| the system whether to use your server's local time as the master 'now'
| reference, or convert it to the configured one timezone. See the 'date
| helper' page of the user guide for information regarding date handling.
|
*/
$config['time_reference'] = 'local';

/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags
|--------------------------------------------------------------------------
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
| in your view files.  Options are TRUE or FALSE (boolean)
|
| Note: You need to have eval() enabled for this to work.
|
*/
$config['rewrite_short_tags'] = FALSE;

/*
|--------------------------------------------------------------------------
| Reverse Proxy IPs
|--------------------------------------------------------------------------
|
| If your server is behind a reverse proxy, you must whitelist the proxy
| IP addresses from which CodeIgniter should trust headers such as
| HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify
| the visitor's IP address.
|
| You can use both an array or a comma-separated list of proxy addresses,
| as well as specifying whole subnets. Here are a few examples:
|
| Comma-separated:  '10.0.1.200,192.168.5.0/24'
| Array:        array('10.0.1.200', '192.168.5.0/24')
*/
$config['proxy_ips'] = '';

`

and ion_auth config

`<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Name:  Ion Auth
*
* Version: 2.5.2
*
* Author: Ben Edmunds
*         ben.edmunds@gmail.com
*         @benedmunds
*
* Added Awesomeness: Phil Sturgeon
*
* Location: http://github.com/benedmunds/CodeIgniter-Ion-Auth
*
* Created:  10.01.2009
*
* Description:  Modified auth system based on redux_auth with extensive customization.  This is basically what Redux Auth 2 should be.
* Original Author name has been kept but that does not mean that the method has not been modified.
*
* Requirements: PHP5 or above
*
*/

/*
| -------------------------------------------------------------------------
| Tables.
| -------------------------------------------------------------------------
| Database table names.
*/
$config['tables']['users']           = 'users';
$config['tables']['groups']          = 'groups';
$config['tables']['users_groups']    = 'users_groups';
$config['tables']['login_attempts']  = 'login_attempts';

/*
 | Users table column and Group table column you want to join WITH.
 |
 | Joins from users.id
 | Joins from groups.id
 */
$config['join']['users']  = 'user_id';
$config['join']['groups'] = 'group_id';

/*
 | -------------------------------------------------------------------------
 | Hash Method (sha1 or bcrypt)
 | -------------------------------------------------------------------------
 | Bcrypt is available in PHP 5.3+
 |
 | IMPORTANT: Based on the recommendation by many professionals, it is highly recommended to use
 | bcrypt instead of sha1.
 |
 | NOTE: If you use bcrypt you will need to increase your password column character limit to (80)
 |
 | Below there is "default_rounds" setting.  This defines how strong the encryption will be,
 | but remember the more rounds you set the longer it will take to hash (CPU usage) So adjust
 | this based on your server hardware.
 |
 | If you are using Bcrypt the Admin password field also needs to be changed in order to login as admin:
 | $2y$: $2y$08$200Z6ZZbp3RAEXoaWcMA6uJOFicwNZaqk4oDhqTUiFXFe63MG.Daa
 | $2a$: $2a$08$6TTcWD1CJ8pzDy.2U3mdi.tpl.nYOR1pwYXwblZdyQd9SL16B7Cqa
 |
 | Be careful how high you set max_rounds, I would do your own testing on how long it takes
 | to encrypt with x rounds.
 |
 | salt_prefix: Used for bcrypt. Versions of PHP before 5.3.7 only support "$2a$" as the salt prefix
 | Versions 5.3.7 or greater should use the default of "$2y$".
 */

$config['hash_method']    = 'bcrypt';   // sha1 or bcrypt, bcrypt is STRONGLY recommended
$config['default_rounds'] = 8;      // This does not apply if random_rounds is set to true
$config['random_rounds']  = FALSE;
$config['min_rounds']     = 5;
$config['max_rounds']     = 9;
$config['salt_prefix']    = version_compare(PHP_VERSION, '5.3.7', '<') ? '$2a$' : '$2y$';

/*
 | -------------------------------------------------------------------------
 | Authentication options.
 | -------------------------------------------------------------------------
 | maximum_login_attempts: This maximum is not enforced by the library, but is
 | used by $this->ion_auth->is_max_login_attempts_exceeded().
 | The controller should check this function and act
 | appropriately. If this variable set to 0, there is no maximum.
 */
$config['site_title']                 = "Example.com";       // Site Title, example.com
$config['admin_email']                = "admin@example.com"; // Admin Email, admin@example.com
$config['default_group']              = 'members';           // Default group, use name
$config['admin_group']                = 'admin';             // Default administrators group, use name
$config['identity']                   = 'email';             // You can use any unique column in your table as identity column. The values in this column, alongside password, will be used for login purposes
$config['min_password_length']        = 8;                   // Minimum Required Length of Password
$config['max_password_length']        = 20;                  // Maximum Allowed Length of Password
$config['email_activation']           = FALSE;               // Email Activation for registration
$config['manual_activation']          = FALSE;               // Manual Activation for registration
$config['remember_users']             = TRUE;                // Allow users to be remembered and enable auto-login
$config['user_expire']                = 60;               // How long to remember the user (seconds). Set to zero for no expiration
$config['user_extend_on_login']       = FALSE;               // Extend the users cookies every time they auto-login
$config['track_login_attempts']       = TRUE;               // Track the number of failed login attempts for each user or ip.
$config['track_login_ip_address']     = FALSE;                // Track login attempts by IP Address, if FALSE will track based on identity. (Default: TRUE)
$config['maximum_login_attempts']     = 1;                   // The maximum number of failed login attempts.
$config['lockout_time']               = 0;                 // The number of seconds to lockout an account due to exceeded attempts
$config['forgot_password_expiration'] = 0;                   // The number of milliseconds after which a forgot password request will expire. If set to 0, forgot password requests will not expire.

/*
 | -------------------------------------------------------------------------
 | Cookie options.
 | -------------------------------------------------------------------------
 | remember_cookie_name Default: remember_code
 | identity_cookie_name Default: identity
 */
$config['remember_cookie_name'] = 'remember_code';
$config['identity_cookie_name'] = 'identity';

/*
 | -------------------------------------------------------------------------
 | Email options.
 | -------------------------------------------------------------------------
 | email_config:
 |    'file' = Use the default CI config or use from a config file
 |    array  = Manually set your email config settings
 */

$config['user_info_subject']='User Details';

$config['use_ci_email'] = TRUE; // Send Email using the builtin CI email class, if false it will return the code and the identity
// $config['email_config'] = array(
//     'mailtype' => 'html',
//     'protocol' => 'smtp',
//     'smtp_host' => 'ssl://smtp.gmail.com',
//     'smtp_user' => 'haribhajan101@gmail.com', // actual values different
//     'smtp_pass' => 'H2SO4H2O',
//     'smtp_port' => '465'
// );

/*
 | -------------------------------------------------------------------------
 | Email templates.
 | -------------------------------------------------------------------------
 | Folder where email templates are stored.
 | Default: auth/
 */
$config['email_templates'] = 'auth/email/';

/*
 | -------------------------------------------------------------------------
 | Activate Account Email Template
 | -------------------------------------------------------------------------
 | Default: activate.tpl.php
 */
$config['email_activate'] = 'activate.tpl.php';

/*
 | -------------------------------------------------------------------------
 | Forgot Password Email Template
 | -------------------------------------------------------------------------
 | Default: forgot_password.tpl.php
 */
$config['email_forgot_password'] = 'forgot_password.tpl.php';

/*
 | -------------------------------------------------------------------------
 | Forgot Password Complete Email Template
 | -------------------------------------------------------------------------
 | Default: new_password.tpl.php
 */
$config['email_forgot_password_complete'] = 'new_password.tpl.php';

$config['user_info_email_template'] = 'user_info.tpl.php';

/*
 | -------------------------------------------------------------------------
 | Salt options
 | -------------------------------------------------------------------------
 | salt_length Default: 22
 |
 | store_salt: Should the salt be stored in the database?
 | This will change your password encryption algorithm,
 | default password, 'password', changes to
 | fbaa5e216d163a02ae630ab1a43372635dd374c0 with default salt.
 */
$config['salt_length'] = 22;
$config['store_salt']  = FALSE;

/*
 | -------------------------------------------------------------------------
 | Message Delimiters.
 | -------------------------------------------------------------------------
 */
$config['delimiters_source']       = 'config';  // "config" = use the settings defined here, "form_validation" = use the settings defined in CI's form validation library
$config['message_start_delimiter'] = '<p>';     // Message start delimiter
$config['message_end_delimiter']   = '</p>';    // Message end delimiter
$config['error_start_delimiter']   = '<p>';     // Error message start delimiter
$config['error_end_delimiter']     = '</p>';    // Error message end delimiter

/* End of file ion_auth.php */
/* Location: ./application/config/ion_auth.php */
`
lloricode commented 7 years ago

You can extend all your admin controller in Admin_Controller after you created a MY_Controller

application/core/MY_Controller.php

`<?php

 defined('BASEPATH') OR exit('No direct script access allowed');

 class MY_Controller extends CI_Controller
 {

        function __construct()
        {
                parent::__construct();
        }

 }

 class Admin_Controller extends MY_Controller
 {

        function __construct()
        {
                parent::__construct();
                $this->load->library('ion_auth');

                if (!$this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin())
                {
                        redirect('admin/login', 'refresh');
                }
        }

 }

 class Public_Controller extends MY_Controller
 {

        function __construct()
        {
                parent::__construct();
        }

 }
`

then set this application/config/autoload.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

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

$autoload['helper'] = array(, 'language');
avenirer commented 7 years ago

From what I'm seeing, you didn't set up the session correctly. Should I trust your word or your code?

jimit-hothi commented 7 years ago

@avenirer session lost in domain its working localhost

when i put blank in base_url so automatic get server ip address using server ip i can not access application and app css and js also not loaded

that is main problem in that

lloricode commented 7 years ago

login controller

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Login extends MY_Controller
{

        private $data;

        public function __construct()
        {
                parent::__construct();
                $this->load->library('ion_auth');
                $this->load->library('form_validation');
                $this->form_validation->set_error_delimiters(
                        $this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')
                );
        }

        private function set_data()
        {
                // the user is not logging in so display the login page
                // set the flash data error message if there is one
                $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message');

                $this->data['identity'] = array('name'        => 'identity',
                    'class'       => 'form-control',
                    'autofocus'   => '',
                    'id'          => 'identity',
                    'value'       => $this->form_validation->set_value('identity'),
                    'placeholder' => 'Email'
                );

                $this->data['password'] = array('name'        => 'password',
                    'class'       => 'form-control',
                    'autofocus'   => '',
                    'id'          => 'password',
                    'type'        => 'password',
                    'placeholder' => 'Password'
                );
                $this->data['remember'] = array(
                    'name'    => 'remember',
                    'value'   => 'Remember Me',
                    'checked' => $this->form_validation->set_value('remember'),
                );
        }

        public function index()
        {
                $this->data['bootstrap_dir'] = $this->config->item('bootstrap_dir') . 'admin/';
                $this->data['title']         = $this->lang->line('login_heading');

                //validate form input
                $this->form_validation->set_rules('identity', str_replace(':', '', $this->lang->line('login_identity_label')), 'required');
                $this->form_validation->set_rules('password', str_replace(':', '', $this->lang->line('login_password_label')), 'required');

                if ($this->form_validation->run() == true)
                {
                        // check to see if the user is logging in
                        // check for "remember me"
                        $remember = (bool) $this->input->post('remember');

                        if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember))
                        {
                                //if the login is successful
                                //redirect them back to the home page
                                $this->session->set_flashdata('message', $this->ion_auth->messages());

                                $user = $this->ion_auth->user()->row();
                                $this->session->set_userdata(array(
                                    'admin_fullname' => $user->last_name . ', ' . $user->first_name
                                ));
                                redirect('admin/home', 'refresh');
                        }
                        else
                        {
                                // if the login was un-successful
                                // redirect them back to the login page
                                $this->session->set_flashdata('message', $this->ion_auth->errors());
                                redirect('admin/login', 'refresh'); // use redirects instead of loading views for compatibility with MY_Controller libraries
                        }
                }
                else
                {
                        $this->set_data();
                        $this->_render_page('admin/login', $this->data);
                }
        }

}

log in view

   <div class="row">
            <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                    <div class="panel-heading"><?php echo $title; ?></div>
                    <div class="panel-body">
                        <?php echo form_open(current_url(), array('role' => 'form')) ?>
                        <fieldset>                            
                            <?php echo (!is_null($message)) ? '<div class="form-group">' . $message . '</div>' : ''; ?>                            
                            <div class="form-group">
                                <?php echo form_input($identity); ?>
                            </div>
                            <div class="form-group">
                                <?php echo form_password($password); ?>
                            </div>
                            <div class="checkbox">
                                <label>
                                    <?php echo form_checkbox($remember) . 'Remember Me'; ?>
                                </label>
                            </div>
                            <?php
                            echo form_submit('save', 'Login', array(
                                'class' => 'btn btn-primary'
                            ));
                            ?>
                        </fieldset>
                        <?php echo form_close(); ?>
                    </div>
                </div>
            </div><!-- /.col-->
        </div><!-- /.row -->
jimit-hothi commented 7 years ago

@lloricode ???

what is this my login and other working perfect localhost when move in live server that time login sucessfull afer go to other section like user management, etc so i check this particular controller user_login or not if not then go to login page .

but my problem user already login but always go to login page. :(

you understood ??

lloricode commented 7 years ago

hmmm, how did you check a session? can we see a codes? or how did you extend every controller in your admin?

lloricode commented 7 years ago

you configuration is same as mine

lloricode commented 7 years ago

is your login user is has user_group as admin? if yes, maybe you checking session is validate only a member group, then after you login success, when you navigate in other controoler, it only check a memer user (not admin). i hope would help.

maybe this is yours

if (!$this->ion_auth->logged_in() )
                {
                        redirect('admin/login', 'refresh');
                }
jimit-hothi commented 7 years ago

@benedmunds @avenirer
if hook not enablein config file so its give error like go to login page in live server ??

i can check every controller user login or not my controller alway redirect to login page i think session not created

avenirer commented 7 years ago

Is this your session config?

... $config['sess_driver'] = 'files'; ... ... $config['sess_save_path'] = NULL; ...

If yes, then your session is set up wrong. Go to CI documentation and look at how to set up sessions.

omarabuomar commented 7 years ago

I have faced the same problem and still not working, I've tried everything...losing session after redirect :( even if I save the session in the database.

benedmunds commented 7 years ago

I'd recommend posting a detailed bug report to the CodeIgniter project. Issues with the core session library in certain environments is out of scope for Ion Auth. Thanks and best of luck getting it sorted!

sdfarshid commented 7 years ago

I have faced the same problem and still not working, I've tried everything...losing session after redirect :( just its work when i set

$config['sess_cookie_name'] = '';

its work , this mean the problems return to cookie , at the end I found this

By default CodeIgniter stores the session data in a cookie, which has an upper limit of 2KB-4KB in size depending on browser. If you are trying to store more than 4KB of data in the session you will start running into issues

omarabuomar commented 7 years ago

I have faced the same problem and still not working, I've tried everything...losing session after redirect :( even if I save the session in the database. session created and saved. session lost after redirect. I've checked the CI version and Downgrade the PHP from 7 to 5.6 and try all the online solutions and not working! ... its working smoothly and no single issue on local and apache server ,,, but I've hot this problems after moving to Nginx ... I'm trying to solve this problem but I think its server configurations and permissions and ssl related. "Problem has been solved!, it was Nginx and varnish setup, just stop dropping session in varnish file and now it's working, just search for this problem session and Nginx "

lanoux22 commented 7 years ago

Did someone solve this problem yet? I am facing the same issue, i am enable to stay logged when i move of page after logged in. It work once, then the session lost the identity. I have noticed when i make a print of the session that it's changing from this : `Array ( [__ci_last_regenerate] => 1497439902 [email] => admin@admin.com [user_id] => 1 [old_last_login] => 1497441769 [identity] => admin@admin.com [__ci_vars] => Array ( [identity] => old [message] => old )

[message] => <p>Ok</p>

)`

to this : Array ( [__ci_last_regenerate] => 1497439902 [email] => admin@admin.com [user_id] => 1 [old_last_login] => 1497441769 )

Any idea?

benedmunds commented 7 years ago

You might want to try the CodeIgniter forums, since this is related to the framework session handling.

avenirer commented 7 years ago

@lanoux22 as I already told you in CodeIgniter forums, most likely you didn't set up the session library correctly.

UbaldoRosas commented 7 years ago

He had the same problem. I just updated version (3.1.5)

zarkopopovski commented 7 years ago

I am not sure if is correct but i change base_url from static ip address to localhost and its working, its weird, probably is something with routing or url helper library , CI 3.1.5 with session saved in DB.

aghidayat commented 6 years ago

@jimit-hothi your problem is solved? i had some problem :(

aghidayat commented 6 years ago

All

The problem is solved with upgrading codeigniter to the latest version, iam upgrade to 3.1.7. Thanks @benedmunds :) 👍

afagard commented 6 years ago

I'm having a similar issue as defined here: https://forum.codeigniter.com/thread-70056.html .. My session library is correctly set up according to the CI docs. I have never noticed this problem before. I don't think its related to IonAuth or CI because it seems to be specific specific to Chrome android... I'm loosing sleep over not being able to figure it out :(

benedmunds commented 6 years ago

@afagard I'm not sure what the issue is, the only guess of something to try I have is to remove the underscore from your session cookie name, that's caused issues for me in the past.

bytedevzone commented 6 years ago

This issues in Core CI session library for matching cookie id size, which is set to 40 in Session lib Actual value in PHP 7.2 is 32

Line preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])

change to preg_match('/^[0-9a-f]{32}$/', $_COOKIE[$this->_config['cookie_name']])

benedmunds commented 6 years ago

@abldev Thanks! You may want to contribute this back to CI core as a pull request if it's not fixed in the latest version of CI yet.

ahmetcuneydioglu commented 4 years ago

This issues in Core CI session library for matching cookie id size, which is set to 40 in Session lib Actual value in PHP 7.2 is 32

Line preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])

change to preg_match('/^[0-9a-f]{32}$/', $_COOKIE[$this->_config['cookie_name']])

I have been dealing with this problem for 2 days. you are really a HERO