<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
define('FLASHDATA_KEY', 'flash');
define('FLASHDATA_NEW', ':new:');
define('FLASHDATA_OLD', ':old:');
define('FLASHDATA_EXP', ':exp:');
_flashdata_sweep();
_flashdata_mark();
function get_session($item = null)
{
if(!is_null($item))
return isset($_SESSION[$item]) ? $_SESSION[$item] : false;
else
{
if(!isset($_SESSION))
my_session_start();
return $_SESSION;
}
}
function unset_session()
{
if(isset($_SESSION))
session_destroy();
}
function unset_session_item($item)
{
unset($_SESSION[$item]);
}
function set_session($data, $val = '')
{
if(is_string($data))
$data = array($data => $val);
if(is_array($data))
{
foreach($data as $key => $val)
$_SESSION[$key] = $val;
}
else
return false;
}
function set_flashdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}
if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$flashdata_key = FLASHDATA_KEY.FLASHDATA_NEW.$key;
set_session($flashdata_key, $val);
}
}
}
function flashdata($key)
{
$flashdata_key = FLASHDATA_KEY.FLASHDATA_OLD.$key;
return get_session($flashdata_key);
}
@access @return
function _flashdata_sweep()
{
$userdata = get_session();
foreach ($userdata as $key => $value)
{
if (strpos($key, FLASHDATA_OLD))
{
unset_session_item($key);
}
}
}
function _flashdata_mark()
{
$userdata = get_session();
foreach ($userdata as $name => $value)
{
$parts = explode(FLASHDATA_NEW, $name);
if (is_array($parts) && count($parts) === 2)
{
$new_name = FLASHDATA_KEY.FLASHDATA_OLD.$parts[1];
set_session($new_name, $value);
unset_session_item($name);
}
}
}
function all_flashdata()
{
$out = array();
foreach (get_session() as $key => $val)
{
if (strpos($key, FLASHDATA_KEY.FLASHDATA_OLD) !== FALSE)
{
$key = str_replace(FLASHDATA_KEY.FLASHDATA_OLD, '', $key);
$out[$key] = $val;
}
}
return $out;
}
function keep_flashdata($key)
{
$old_flashdata_key = FLASHDATA_KEY.FLASHDATA_OLD.$key;
$value = get_session($old_flashdata_key);
$new_flashdata_key = FLASHDATA_KEY.FLASHDATA_NEW.$key;
set_session($new_flashdata_key, $value);
}
function my_session_start()
{
static $my_session_started = FALSE;
if ($my_session_started && session_id())
return;
session_cache_limiter(FALSE);
$my_session_id = NULL;
if (isset($_COOKIE['PHPSESSID']))
$my_session_id = $_COOKIE['PHPSESSID'];
elseif (isset($_GET['PHPSESSID']))
$my_session_id = $_GET['PHPSESSID'];
if (empty($my_session_id) || !preg_match('/^[a-z0-9]{16,32}$/', $my_session_id))
{
$my_session_id = my_random_key(32, FALSE, TRUE);
session_id($my_session_id);
}
session_start();
if (!isset($_SESSION['initiated']))
{
session_regenerate_id();
$_SESSION['initiated'] = TRUE;
}
$my_session_started = TRUE;
}
function my_random_key($len, $readable = false, $hash = false)
{
$key = '';
if ($hash)
$key = substr(sha1(uniqid(rand(), true)), 0, $len);
else if ($readable)
{
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for ($i = 0; $i < $len; ++$i)
$key .= substr($chars, (mt_rand() % strlen($chars)), 1);
}
else
for ($i = 0; $i < $len; ++$i)
$key .= chr(mt_rand(33, 126));
return $key;
}