all for client is very dangerous and some data I want to save in backend:
database table:
create table ci_sessions (
session_id varchar(40) default '0' not null primary key,
ip_address varchar(16) default '0' not null,
user_agent varchar(50) not null,
last_activity integer default 0 not null,
security_zone text default '' not null
);
system/application/library/MY_Session.php:
class MY_Session extends CI_Session {
var $security_data = array();
/**
Security data write
*/
function security_write() {
if ($this->use_database)
$this->CI->db->update($this->session_table,
array('security_zone' => serialize($this->security_data)),
array('session_id' => $this->userdata['session_id']));
}
/**
Security data read
*/
function security_read() {
if ($this->use_database) {
$this->CI->db->select('security_zone')->from($this->session_table)->where('session_id',$this->userdata['session_id']);
$query = $this->CI->db->get();
if ($query->num_rows() && is_array($data = @unserialize($query->row()->security_zone)))
$this->security_data = $data;
}
}
/**
Set security data
*/
function set_security_userdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
$newdata = array($newdata => $newval);
if (count($newdata) > 0)
foreach ($newdata as $key => $val)
$this->security_data[$key] = $val;
$this->sess_write();
}
/**
Get security data
*/
function security_userdata($item) {
return ( ! isset($this->security_data[$item])) ? FALSE : $this->security_data[$item];
}
/**
Delete a session variable
*/
function unset_security_userdata($newdata = array())
{
if (is_string($newdata))
$newdata = array($newdata => '');
if (count($newdata) > 0)
foreach ($newdata as $key => $val)
unset($this->security_data[$key]);
$this->sess_write();
}
//----------------------- Override parent
/**
Fetch the current session data if it exists
*/
function sess_read() {
$result = parent::sess_read();
if ($result)
$this->security_read();
return $result;
}
/**
Write the session
*/
function sess_write() {
parent::sess_write();
$this->security_write();
}
...
in session (or other) class:
...
/**
Save captcha security code
*/
function setCaptchaKey($key) {
$this->set_security_userdata('captcha',$key);
}
/**
Verify captcha & kill it
*/
function captchaCode() {
$key = $this->security_userdata('captcha');
$this->unset_security_userdata('captcha');
return $key;
}
...
