CodeIgniter 会话管理


在建立网站时,我们经常需要跟踪用户的活动和状态,为此,我们必须使用会话(session),CodeIgniter为这个目的提供了会话类。

初始化会话


会话数据可全局访问,但要使用这些数据,我们首先需要初始化会话,我们可以通过在构造函数中执行以下行来做到这一点。

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

加载会话库后,你可以简单地使用会话对象,如下所示。

$this->session

添加会话数据


在 PHP 中,我们简单地使用$_SESSION数组来设置会话中的任何数据,如下所示。

$_SESSION[‘key’] = value;

'key'是数组的键,并且value分配在等号的右侧。

同样的事情可以在 CodeIgniter 中完成,如下所示。

$this->session->set_userdata('some_name', 'some_value');

set_userdata()函数需要两个参数。第一个参数 some_name 是会话变量的名称,some_value将被保存在该变量下。

set_userdata()函数还支持另一种语法,你可以在其中传递数组来保存值,如下所示。

$newdata = array( 
    'username'  => 'johndoe',
    'email'     => 'johndoe@some-site.com',
    'logged_in' => TRUE
);  

$this->session->set_userdata($newdata);

删除会话数据


在 PHP 中,我们可以使用unset()函数

unset($_SESSION[‘some_name’]);

在 CodeIgniter 中删除会话数据非常简单,如下所示。下面的unset_userdata()函数将仅从会话中删除一个变量。

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

如果要从会话中删除更多值或删除整个数组,可以使用以下unset_userdata()函数。

$this->session->unset_userdata($array_items);

获取会话数据


在会话中设置数据后,我们也可以检索这些数据,如下所示。userdata()函数将被用于此目的。如果你试图访问的数据不可用,这个函数将返回NULL

$name = $this->session->userdata('name');

创建一个名为Session_controller.php的控制器类,并将其保存在application/controller/Session_controller.php

<?php 
    class Session_controller extends CI_Controller {
	
        public function index() {
            // 加载会话库
            $this->load->library('session');
			
            // 添加数据到会话
            $this->session->set_userdata('name','virat');
			
            $this->load->view('session_view');
        }
		
        public function unset_session_data() {
            // 加载会话库
            $this->load->library('session');
			
            // 删除会话数据
            $this->session->unset_userdata('name');
            $this->load->view('session_view');
        }
		
    }
?>

创建一个名为session_view.php的视图文件,并将其保存在application/views/session_view.php

<!DOCTYPE html> 
<html lang = "en">
 
    <head>
        <meta charset = "utf-8">
        <title>CodeIgniter Session 例子</title>
    </head>
	
    <body>
        Welcome <?php echo $this->session->userdata('name'); ?>
        <br>
        <a href = 'http:// localhost:85/CodeIgniter-3.0.1/CodeIgniter3.0.1/index.php/sessionex/unset'>
            Click Here</a> to unset session data.
    </body>
	
</html>

application/config/routes.php中对routes.php文件进行修改,并在文件末尾添加以下一行。

$route['sessionex'] = 'Session_Controller';

用你的域名替换 yoursite.com,使用浏览器访问以下地址来执行上述例子。

http://yoursite.com/index.php/sessionex