【问题标题】:How to decode BLOB data object from session table CI如何从会话表 CI 中解码 BLOB 数据对象
【发布时间】:2016-08-21 00:33:52
【问题描述】:

我正在创建一个 REST API 以与我的 android 应用程序一起使用,因此我启用了 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 应用程序,每当我的应用程序需要来自服务器的信息时,它就会将其发回。我还创建了选择查询来获取 BLOB 对象:

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

但是如何访问数据的键来获取值呢?

【问题讨论】:

标签: php mysql codeigniter session


【解决方案1】:

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(我更愿意推荐)

【讨论】:

  • 那么 CodeIgniter 是如何知道要检索哪些会话数据的呢?真的有必要将我的会话 ID 从我的 android 应用程序发送回服务器吗?
  • REST 是无状态的,HTTP 也是如此。您不能拥有 REST API 并尝试使其表现得像浏览器会话,因此,您需要查询会话。您是否考虑过使用代币?
  • 我应该如何使用令牌?那么,有没有办法使用 BLOB 对象呢?
  • 看看github.com/chriskacerguis/codeigniter-restserver 但同样,您不应该依赖会话表来查询由codeigniter内部管理的blob对象。
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多