CodeIgniter - Tempdata



In some situations, where you want to remove data stored in session after some specific time-period, this can be done using tempdata functionality in CodeIgniter.

Add Tempdata

To add data as tempdata, we have to use mark_as_tempdata() function. This function takes two argument items or items to be stored as tempdata and the expiration time for those items are as shown below.

// 'item' will be erased after 300 seconds(5 minutes) 
$this->session->mark_as_temp('item',300);

You can also pass an array to store multiple data. All the items stored below will be expired after 300 seconds.

$this->session->mark_as_temp(array('item','item2'),300);

You can also set different expiration time for each item as shown below.

// '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 
));

Retrieve Tempdata

We can retrieve the tempdata using tempdata() function. This function assures that you are getting only tempdata and not any other data. Look at the example given below to see how to retrieve tempdata. tempdata() function will take one argument of the item to be fetched.

$this->session->tempdata('item');

If you omit the argument, then you can retrieve all the existing tempdata.

Remove Tempdata

Tempdata is removed automatically after its expiration time but if you want to remove tempdata before that, then you can do as shown below using the unset_tempdata() function, which takes one argument of the item to be removed.

$this->session->unset_tempdata('item');

Example

Create a class called Tempdata_controller.php and save it in 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'); 
      } 
   } 
?>

Create a file called tempdata_view.php and save it in 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>

Make the changes in the routes.php file in application/config/routes.php and add the following line at the end of the file.

$route['tempdata'] = "Tempdata_controller"; 
$route['tempdata/add'] = "Tempdata_controller/add";

Execute the above example by visiting the following link. Replace the yoursite.com with the URL of your site.

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

After visiting the above URL, you will see a screen as shown below.

TempData

Click on “Click Here” link and you will see a screen as shown below.

Here, in this screen you will see a value of temp data variable. Refresh the same page after five seconds again as we have set the temp data for five seconds and you will see a screen like above and temp data variable will be removed automatically after five seconds. If you refresh the same page before 5 seconds, then the temp data will not be removed, as the time period is not over.

Add Temp Data

Destroying a Session

In PHP, we are using the session_destroy() function to destroy the session and in CodeIgniter we can destroy the function as shown below.

$this->session->sess_destroy();

After calling this function, all the session data including the flashdata and tempdata will be deleted permanently and cannot be retrieved back.

Advertisements