CodeIgniter - 会话管理
在构建网站时,我们经常需要跟踪用户的活动和状态,为此,我们必须使用session。CodeIgniter 有用于此目的的 session 类。
初始化会话
会话数据在整个站点中都可用,但要使用这些数据,我们首先需要初始化会话。我们可以通过在构造函数中执行以下行来实现这一点。
$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 Example</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 替换为您网站的 URL。
http://yoursite.com/index.php/sessionex
