如何从会话表CI解码BLOB数据对象

时间:2016-04-26 23:20:12

标签: php mysql codeigniter session

我正在创建一个与我的Android应用程序一起使用的REST API,因此我启用了CodeIgniter数据库会话管理器(我遵循此answer),以便在用户登录时存储一些信息。

以下是我存储信息的代码:

$this->session->set_userdata('key', 'value');

这是我的config.php:

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = TRUE;

我的问题是:如何获取已存储在会话表中的信息?我只在列ci_session上看到一个BLOB对象,但我该如何解码它或如何使用它?

我已将会话ID从我的服务器发送到我的Android应用程序,每当我的应用程序需要来自服务器的信息时,它都会将其发回。我还创建了select查询来获取BLOB对象:

$data = $this->db->query("SELECT data FROM ci_sessions WHERE id='5c825c032b6cf25b10e984f0ee8e1bd48a2c1916'");
    $query = $data->result();

但是如何访问数据的密钥才能获得值?

1 个答案:

答案 0 :(得分:0)

CodeIgniter已经为你做了,如果你想要一整套项目的数组:

$this->session->all_userdata()

如果您只想获取特定值,那么将返回所有键和值:

$this->session->userdata('foo');

foo是您要检索的值的关键字。

它与it is on the documentation完全相同,唯一的区别是会话数据存储在数据库中而不是由PHP / Webserver处理。因此,只需使用常用方法来存储或访问数据。您不必直接查询数据库以获取会话信息。

<强>更新

还要确保首先通过在构造函数中将其加载到控制器中来加载会话库:

public function __construct() 
{
  $this->load->library('session');
}

autoloading the library(我宁愿推荐)