Сеанс кодигната user_data пуст - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь сохранить данные ниже в сеансе Codeigniter (база данных)

$session_data = array(
    "name"=>$user_details['name'],
    "email"=>$user_details['email'],
    "role"=>$user_details['role'],
    "status"=>$user_details['status'],
    "mobile"=>$user_details['mobile'],
    "permissions"=>json_decode($user_details['permissions'],TRUE),
    "country_id" => $country_details['country_id'],
    "country_name" => $country_details['name'],
    // "countries" => $active_countries
);
$this->session->set_userdata("user",$session_data);

Это абсолютно нормально, и данные хранятся в базе данных, как показано ниже в столбце user_data в таблице ci_sessions.

a:2:{s:9:"user_data";s:0:"";s:4:"user";a:8:{s:4:"name";s:9:" Test";s:5:"email";s:18:"email@email.com";s:4:"role";s:11:"super_admin";s:6:"status";s:1:"1";s:6:"mobile";s:10:"1234567890";s:11:"permissions";a:9:{s:9:"dashboard";a:1:{i:0;s:3:"all";}s:8:"settings";a:1:{i:0;s:3:"all";}s:9:"employees";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}s:7:"drivers";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}s:5:"rides";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}s:5:"users";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}s:4:"cars";a:1:{i:0;s:4:"list";}s:3:"ads";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}s:7:"country";a:5:{i:0;s:4:"list";i:1;s:3:"add";i:2;s:4:"edit";i:3;s:6:"delete";i:4;s:4:"view";}}s:10:"country_id";s:3:"174";s:12:"country_name";s:5:"QATAR";}}

Но, когда я отменяю комментарий индекса массива стран из массива $session_data, в базе данных создается запись, но значение столбца user_data пусто.Но когда я печатаю в том же контроллере, он отображает все данные

$session_data = array(
    "name"=>$user_details['name'],
    "email"=>$user_details['email'],
    "role"=>$user_details['role'],
    "status"=>$user_details['status'],
    "mobile"=>$user_details['mobile'],       
    "permissions"=>json_decode($user_details['permissions'],TRUE),
    "country_id" => $country_details['country_id'],
    "country_name" => $country_details['name'],
    "countries" => $active_countries
);
$this->session->set_userdata("user",$session_data);
print_r($this->session->userdata['user']);

Array ( [name] => Ways Test [email] => test@email.com [role] => super_admin [status] => 1 [mobile] => 1234567890 [permissions] => Array ( [dashboard] => Array ( [0] => all ) [settings] => Array ( [0] => all ) [employees] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) [drivers] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) [rides] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) [users] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) [cars] => Array ( [0] => list ) [ads] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) [country] => Array ( [0] => list [1] => add [2] => edit [3] => delete [4] => view ) ) [country_id] => 174 [country_name] => QATAR [countries] => Array ( [0] => Array ( [country_id] => 99 [iso_name] => IN [name] => INDIA [image] => uploads/country_image/IN.png [nicename] => India [iso3] => IND [numcode] => 356 [phonecode] => +91 [currency_code] => Indian rupee [currency_name] => INR [currency_symbol] => ₹ [distance_unit] => kilometer [status] => 1 ) [1] => Array ( [country_id] => 174 [iso_name] => QA [name] => QATAR [image] => uploads/country_image/QA.png [nicename] => Qatar [iso3] => QAT [numcode] => 634 [phonecode] => +974 [currency_code] => Qatari riyal [currency_name] => QR [currency_symbol] => ر.ق [distance_unit] => kilometer [status] => 1 ) ) )

Предполагая, что это может быть проблемой с размером памяти, я изменил тип данных mysql для user_data с Text на LargeText.До сих пор не работает.

Есть ли проблема с Cookie?Я предполагаю, что cookie просто содержит ссылку на базу данных сеанса, а не на фактические данные.Поскольку размер файла cookie не является проблемой

Конфиг:

$config["sess_cookie_name"] = "ci_sessions";
$config["sess_expiration"] = 7200;
$config["sess_expire_on_close"] = FALSE;
$config["sess_encrypt_cookie"] = FALSE;
$config["sess_use_database"] = TRUE;
$config["sess_table_name"] = "ci_sessions";
$config["sess_match_ip"] = FALSE;
$config["sess_match_useragent"] = FALSE;
$config["sess_time_to_update"] = 300;

$config["cookie_prefix"] = "";
$config["cookie_domain"] = "";
$config["cookie_path"] = "/";
$config["cookie_secure"] = FALSE;

Структура базы данных:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(45) NOT NULL DEFAULT '0',
  `user_agent` varchar(120) NOT NULL,
  `last_activity` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `user_data` longtext NOT NULL,
  PRIMARY KEY (`session_id`),
  KEY `last_activity_idx` (`last_activity`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Authentication.php (Controller)

if($result['success']===true && $result['user_details']['status']=='1'){
    $user_details = $result['user_details'];
    $model_call = $this->country_model->active_countries();
    $active_countries = $model_call['active_countries'];
    // Getting country details
    $model_call = $this->country_model->get_country_details($user_details['country']);
    $country_details = $model_call['country_details'];

    $session_data = array(
        "name"=>$user_details['name'],
        "email"=>$user_details['email'],
        "role"=>$user_details['role'],
        "status"=>$user_details['status'],
        "mobile"=>$user_details['mobile'],
        "permissions"=>json_decode($user_details['permissions'],TRUE),
        "country_id" => $country_details['country_id'],
        "country_name" => $country_details['name'],
        "countries" => $active_countries
    );
    $this->session->set_userdata("user",$session_data);
    redirect("myadmin/dashboard");
}

Dashboard.php (Контроллер)

public function __construct(){
    parent::__construct();
    var_dump($this->session->all_userdata());
    //var_dump($this->session->userdata['user']);
    exit();
    if(!isset($this->session->userdata['user'])){
        redirect("myadmin/authentication"); 
    }
}

Я использую codeigniter версии 2.2.4

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Попробуйте обновить до новой версии codeigniter, у меня была похожая проблема, и это решило ее!

0 голосов
/ 21 сентября 2018

Размещение структуры вашей таблицы было бы действительно полезным, тем не менее, одной из возможных причин этого является сам индекс страны.Я предполагаю, что вы используете $ this-> db-> insert для сохранения этого сеанса в вашей базе данных.Индекс страны - это массив, который создает ошибку сервера.Я предлагаю вам отладить модель, которую вы используете для вставки этих данных.

добавление приведенного ниже кода после вставки должно показать ошибки.

$ this-> db -> _ error_message ();$ This-> дб -> _ error_number ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...