php如何设置局部变量,php – 取消设置局部变量

在Code Igniter框架中有几个这种行为的例子 – 在方法的开头创建一个变量,使用它,在方法结束之前,取消设置这个变量.

他们为什么要取消他们?重点是什么?据我所知,局部变量无论如何都会在方法结束时死亡.

代码点火器,来自会话类(参见最后一行):

function sess_read()

{

// Fetch the cookie

$session = $this->CI->input->cookie($this->sess_cookie_name);

// No cookie? Goodbye cruel world!...

if ($session === FALSE)

{

log_message('debug', 'A session cookie was not found.');

return FALSE;

}

// Decrypt the cookie data

if ($this->sess_encrypt_cookie == TRUE)

{

$session = $this->CI->encrypt->decode($session);

}

else

{

// encryption was not used, so we need to check the md5 hash

$hash = substr($session, strlen($session)-32); // get last 32 chars

$session = substr($session, 0, strlen($session)-32);

// Does the md5 hash match? This is to prevent manipulation of session data in userspace

if ($hash !== md5($session.$this->encryption_key))

{

log_message('error', 'The session cookie data did not match what was expected. This could be a possible hacking attempt.');

$this->sess_destroy();

return FALSE;

}

}

// Unserialize the session array

$session = $this->_unserialize($session);

// Is the session data we unserialized an array with the correct format?

if ( ! is_array($session) OR ! isset($session['session_id']) OR ! isset($session['ip_address']) OR ! isset($session['user_agent']) OR ! isset($session['last_activity']))

{

$this->sess_destroy();

return FALSE;

}

// Is the session current?

if (($session['last_activity'] + $this->sess_expiration) < $this->now)

{

$this->sess_destroy();

return FALSE;

}

// Does the IP Match?

if ($this->sess_match_ip == TRUE AND $session['ip_address'] != $this->CI->input->ip_address())

{

$this->sess_destroy();

return FALSE;

}

// Does the User Agent Match?

if ($this->sess_match_useragent == TRUE AND trim($session['user_agent']) != trim(substr($this->CI->input->user_agent(), 0, 120)))

{

$this->sess_destroy();

return FALSE;

}

// Is there a corresponding session in the DB?

if ($this->sess_use_database === TRUE)

{

$this->CI->db->where('session_id', $session['session_id']);

if ($this->sess_match_ip == TRUE)

{

$this->CI->db->where('ip_address', $session['ip_address']);

}

if ($this->sess_match_useragent == TRUE)

{

$this->CI->db->where('user_agent', $session['user_agent']);

}

$query = $this->CI->db->get($this->sess_table_name);

// No result? Kill it!

if ($query->num_rows() == 0)

{

$this->sess_destroy();

return FALSE;

}

// Is there custom data? If so, add it to the main session array

$row = $query->row();

if (isset($row->user_data) AND $row->user_data != '')

{

$custom_data = $this->_unserialize($row->user_data);

if (is_array($custom_data))

{

foreach ($custom_data as $key => $val)

{

$session[$key] = $val;

}

}

}

}

// Session is valid!

$this->userdata = $session;

unset($session);

return TRUE;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值