php - 为什么我使用 CI session 的登录系统不允许我检索存储在数据库中的任何数据

标签 php database codeigniter session mysqli

我有一个包含以下列的表格:

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/

相关文章:

php 表单提交后返回页面

php - 如何获得父子类别的项目计数?

php - 使用php编辑mysql表中的数据

java - 使用 Java servlet 和 HTML 表单检索数据库数据

mysql - 如何对包含多个唯一键的 MySQL 表进行分区?

c# - 无需数据库即可永久存储数据

php - 如何将图像添加到 Codeigniter 中的分页按钮

php - 为什么我可以用非打印字符定义 PHP 函数?

php - CI3 注销 session 不重定向

php - 如何避免日期和凭证号码重复?