在某些情况下,您希望在某个特定时间段后删除存储在会话中的数据,可以使用CodeIgniter中的 tempdata 功能来完成.
要将数据添加为 tempdata ,我们必须使用 mark_as_tempdata()函数.此函数将两个参数项或项存储为 tempdata ,这些项的到期时间如下所示.
// 'item' will be erased after 300 seconds(5 minutes) $this->session->mark_as_temp('item',300);
您还可以传递数组来存储多个数据.以下存储的所有项目将在300秒后过期.
$this->session->mark_as_temp(array('item','item2'),300);
您还可以为每个项目设置不同的到期时间,如下所示.
// 'item' will be erased after 300 seconds, while 'item2' // will do so after only 240 seconds $this->session->mark_as_temp(array( 'item'=>300, 'item2'=>240 ));
我们可以使用 tempdata()函数检索tempdata.此功能可确保您只获取tempdata而不获取任何其他数据.查看下面给出的示例,了解如何检索tempdata. tempdata()函数将获取要获取的项目的一个参数.
$this->session->tempdata('item');
如果省略参数,则可以检索所有现有的tempdata.
Tempdata在到期时间后自动删除,但是如果你想在此之前删除tempdata,那么你可以使用 unset_tempdata()函数执行如下所示的操作,该函数需要一个参数要删除的项目.
$this->session->unset_tempdata('item');
创建一个名为 Tempdata_controller.php 的类并将其保存在 application/controller/Tempdata_controller.php .
<?php class Tempdata_controller extends CI_Controller { public function index() { $this->load->library('session'); $this->load->view('tempdata_view'); } public function add() { $this->load->library('session'); $this->load->helper('url'); //tempdata will be removed after 5 seconds $this->session->set_tempdata('item','item-value',5); redirect('tempdata'); } } ?>
创建名为 tempdata_view.php 的文件并将其保存在 application/views/tempdata_view.php 中
<!DOCTYPE html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>CodeIgniter Tempdata Example</title> </head> <body> Temp Data Example <h2><?php echo $this->session->tempdata('item'); ?></h2> <a href = 'tempdata/add'>Click Here</a> to add temp data. </body> </html>
在application/config/routes.php的 routes.php 文件中进行更改,并在最后添加以下行该文件.
$route['tempdata'] = "Tempdata_controller"; $route['tempdata/add'] = "Tempdata_controller/add";
访问以下链接执行上述示例.将yoursite.com替换为您网站的网址.
http://yoursite.com/index.php/tempdata
访问上述网址后,您会看到如下所示的屏幕.
点击"点击此处"链接,您将看到如下所示的屏幕.
在此屏幕中,您将看到临时数据变量的值.我们将温度数据设置为五秒后再次刷新同一页面五秒后,您将看到如上所示的屏幕,并且五秒后将自动删除临时数据变量.如果您在5秒之前刷新同一页面,则不会删除临时数据,因为时间段尚未结束.
在PHP中,我们使用 session_destroy()函数为了销毁会话,我们可以在CodeIgniter中销毁函数,如下所示.
$ this-> session-> sess_destroy();
调用此函数后,将永久删除包括 flashdata 和 tempdata 在内的所有会话数据并且无法取回.