【问题标题】:Why i am getting this Codeigniter session error为什么我收到此 Codeigniter 会话错误
【发布时间】:2016-10-07 13:34:43
【问题描述】:

我是 codeigniter 的初学者。从Here 学习 codeigniter。现在我需要有人帮助才能继续session

//config.php

<pre> <code>    
    $config['sess_driver'] = 'database';    
    $config['sess_save_path'] = 'ci_sessions';    
    $config['sess_cookie_name'] = 'cisessions';    
    $config['sess_expiration'] = 7200;    
    $config['sess_match_ip'] = FALSE;    
    $config['sess_time_to_update'] = 300;    
    $config['sess_regenerate_destroy'] = FALSE;    
</code> </pre>

//数据库表

 
    CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `session_id` varchar(80) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `user_agent` varchar(120) NOT NULL,
        `last_activity` int(10) unsigned DEFAULT 0 NOT NULL,
        `user_data` text,
        KEY `last_activity` (`last_activity`)
    );
 

mode_user



    class Model_user extends MY_Model{
    protected $_table_name = 'user';
    protected $_order_by = 'name';
    public $rules = array(
        'email' => array('field' => 'email', 'label' => 'Email', 'rules' => 'trim|required|valid_email|xss_clean'),
        'password' => array('field' => 'password', 'label' => 'Password', 'rules' => 'trim|required'),
    );

    function __construct(){
        parent::__construct();
    }

    public function login(){
        $user = $this->get_by(array(
            'email'     => $this->input->post('email'),
            'password'  => $this->hash($this->input->post('password')),
        ), TRUE);
        if(count($user)){
            $data = array(
                'name'      => $user->name,
                'email'     => $user->email,
                'id'        => $user->id,
                'loggedin'  => TRUE,
            );
            $this->session->set_userdata($data);
        }
    }

    public function logout(){
        $this->session->sess_destroy();
    }

    public function loggedin(){
        return (bool) $this->session->userdata('loggedin');
    }

    public function hash($string){
        return hash('sha512'. $string . config_item('encryption_key'));
    }
    }

用户控制器



    class User extends Backend_Controller{
    function __consrtuct(){
        parent::__consrtuct();
    }

    public function login(){
        $rules = $this->model_user->rules;
        $this->form_validation->set_rules($rules);
        if($this->form_validation->run() == TRUE){
            //login & redirect
            $this->model_user->login();
        }
        $this->data['subview'] = 'admin/user/login';
        $this->load->view('admin/_layout_modal', $this->data);
    }
    }

出现这样的错误

A PHP Error was encountered
Severity: Warning
Message: Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is correct (ci_sessions)
Filename: Unknown
Line Number: 0
Backtrace:

请指导我解决这个错误

谢谢

【问题讨论】:

  • 有什么理由将会话保存到数据库??
  • @AbdullaNilam: 很久以后你好吗?
  • @devpro 很好。更换名字。那就是你不会注意到我
  • ``user_agent` varchar(120) NOT NULL,` 120 太短,我建议 255 长度
  • @Abdulla Nilam 只是按照教程提交,使用迁移创建表。所以手动创建。

标签: php codeigniter session


【解决方案1】:

codeigniter 3.1.0 文档说创建会话表:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    KEY `ci_sessions_timestamp` (`timestamp`)
);

// When sess_match_ip = TRUE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id, ip_address);

// When sess_match_ip = FALSE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id);

在数据库中存储会话时,您还必须提及一些限制:
- 只能使用您的默认数据库连接(或您从控制器以 $this->db 访问的那个)。
- 您必须启用查询生成器。
- 您不能使用持久连接。
- 您不能使用启用了 cache_on 设置的连接。

更多信息可以在这里找到:http://www.codeigniter.com/user_guide/libraries/sessions.html#session-drivers

可能您的数据库连接配置不正确或与会话配置不匹配?

【讨论】:

  • 当我改变 'db_debug' => FALSE。 to 'db_debug' => (ENVIRONMENT !== 'production') getiing this error Unknown column 'data' in 'field list' SELECT data FROM ci_sessions WHERE id = '59538fa0a69463b18761e21f07a8c77df968f980' 文件名:文件 (x86)/Ampps/www/arc/system/database/DB_driver.php 行号:691
  • 那么看来你没有使用Codeigniter 3.x——你使用的是2.x:codeigniter.com/userguide2/libraries/sessions.html
猜你喜欢
  • 2018-06-22
  • 2016-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多