Codeigniter会话数据库

时间:2010-01-14 10:27:45

标签: php codeigniter session cookies

我正在尝试构建一个记住用户与网站交互的系统,例如我的网站允许用户构建自己的导航系统,但我希望系统能够记住他们选择的导航系统而不需要用户必须注册,我认为我需要使用会话/ cookie,而且我认为我需要使用cookie,因为它们在浏览器关闭时不会过期(我知道它们会在一段时间后过期) 。

所以我已经使用codeigniter会话库进行了设置,并将会话ID保存到数据库中。我需要知道的是如何使用会话和cookie保存用户导航选项,例如,如果用户选择使用博客导航,那么我需要能够保存,以便下次他们来到网站时,博客导航是用过的。有人可以指点我正确的方向吗?请不要指向我手册。我尝试过cookie帮助程序,无论我尝试什么,cookie都不会设置。

3 个答案:

答案 0 :(得分:3)

我知道你要求不要指出手册,但它确实会给你答案。你不应该直接与cookie交互来做你想做的事情,sessions为你处理这个问题。只要您不保存任何敏感数据,就可以将会话设置保留为默认值,这会将会话数据保存到用户计算机上的cookie中,但您需要进行小幅调整以确保延长超时时间。 / p>

首先,请先阅读:Session Class : CodeIgniter User Guide

然后你可以加载会话库:

$this->load->library("session");

并将数据保存到会话中:

$this->session->set_userdata("navigation_choice_a", "navigation_value_a");

然后使用以下方式阅读:

$this->session->userdata("navigation_choice_a"); 
// Will return "navigation_value_a"

您还可以将数字,类和数组保存到会话中,并在读取数据时重新构建。

最后一件事,为确保会话在两小时后不会过期,请在配置中将$config['sess_expiration']更改为:

$config['sess_expiration'] = 0;

这将确保会话不会过期。

答案 1 :(得分:1)

要清除我们使用的会话:

$this->session->unset_userdata('navigation_choice_a');

答案 2 :(得分:0)

  1. 当客户选择导航系统时,您需要将客户导航选项保存在数据库中。

  2. 使用登录。

  3. 从数据库中提取数据。

  4. 我在控制器中提取这样的客户信息。

    ...
    if(isset($_SESSION['customer_id'])){
            $data['fname'] = $_SESSION['customer_first_name'];
            $data['lname'] = $_SESSION['customer_last_name'];
            $data['telephone'] = $_SESSION['phone_number'];
            $data['email'] = $_SESSION['email'];
            $data['address'] = $_SESSION['address'];
            $data['city'] = $_SESSION['city'];
            $data['pcode'] = $_SESSION['post_code'];
        }
    
        $this->load->vars($data);
        $this->load->view('welcome/template'); 
    

    这是我的登录控制器/登录

    function login(){
        // $data['loggedin']=0;
        if ($this->input->post('email')){
            $e = $this->input->post('email');
            $pw = $this->input->post('password');
            $this->MCustomers->verifyCustomer($e,$pw);
            if (isset($_SESSION['customer_id'])){
                // $data['loggedin']=$_SESSION['customer_id'];
                $this->session->set_flashdata('msg', 'You are logged in!');
                redirect('welcome/login','refresh');
            }
    
            $this->session->set_flashdata('msg', 'Sorry, your email or password is incorrect!');
            redirect('welcome/login','refresh');
        }       
    
    
        $data['main'] = 'welcome/customerlogin';// this is using views/login.php
        $data['title'] = "Customer Login";
    
        $this->load->vars($data);
        $this->load->view('welcome/template');  
      }
    

    退出

    function logout(){
        // or this would remove all the variable in the session
        session_unset();
    
        //destroy the session
        session_destroy(); 
    
        redirect('welcome/index','refresh');    
     }