我有一个包含以下列的表格:
session_id varchar(40) No 0
ip_address varchar(16) No 0
user_agent varchar(50) No
last_activity int(10) No 0
user_data text No
我试图获取我创建的 session ,但它没有返回任何值。
我也尝试将它们创建为数据库字段,但那也是错误的。
我也尝试将它们保存在 cookie 中,而不是 DB,仍然没有用。
这是我的 PHP 脚本:
$user_data = array(
'id' => $row->id,
'is_logged' => TRUE
);
$this->session->set_userdata($user_data);
我尝试使用这个检索它:
$this->session->userdata('is_logged');/is_logged is an example
注意:
我是 Codeigniter 的新手。
最佳答案
CI session 类将允许您将 session 存储在数据库中(请注意,这不会否定 cookie 的使用,只是添加了一个额外的持久层以确保安全,以防您需要验证 session ID)。下面是创建 session 表的sql语句。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);
然后,您需要告诉 CI 将数据库用于 session 数据:
// in /application/config.php
$config['sess_use_database'] = TRUE;
// and what the name of the db table is
$config['sess_table_name'] = 'ci_sessions';
然后,当您登录您的用户时,您将向他们的 session 数据添加详细信息:
$this->session->set_userdata('id', $user_id);
$this->session->set_userdata('username', $username);
$this->session->set_userdata('email', $email);
$this->session->set_userdata('isLogged', TRUE);
这就是您用来查看某人是否有权访问页面或资源的方法。
if ($this->session->userdata('isLogged') === TRUE)
{
// show page
}
else
{
// show access error
}
关于php - 为什么我使用 CI session 的登录系统不允许我检索存储在数据库中的任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8489920/