CodeIgniter 中文手册 版本 2.1.0

查看原文

输入类

输入类有两个目的:

  1. 为了安全,预处理输入数据。
  2. 提供helper的一些方法,取得输入数据,并预处理输入数据。

说明: 系统自动加载此类,不用手动加载。

安全过滤(Security Filtering)

当触发一个控制器的时候,安全过滤(Security Filtering)功能自动启动。做以下事情:

跨站脚本(XSS)过滤

输入类有能力阻止跨站脚本攻击。如果你想让过滤器遇到 POST 或者 COOKIE 数据时自动运行,你可以通过打开你的 application/config/config.php 文件进行如下设置实现:

$config['global_xss_filtering'] = TRUE;

请参考 安全类 文档以获得更多信息在你的应用中使用跨站脚本过滤。

使用 POST, COOKIE, 或 SERVER 数据

CodeIgniter 有3个 helper方法可以让用户取得POST, COOKIE 或 SERVER 的内容。用这些方法比直接使用php方法($_POST['something'])的好处是不用先检查此项目是不是存在。 直接使用php方法,必须先做如下检验:

if ( ! isset($_POST['something']))
{
    $something = FALSE;
}
else
{
    $something = $_POST['something'];
}

用CodeIgniter内建的方法,你可以这样:

$something = $this->input->post('something');

这3个方法是:

$this->input->post()

第一个参数是所要取得的post中的数据:

$this->input->post('some_data');

如果数据不存在,方法将返回 FALSE (布尔值)。

第二个参数是可选的,如果想让取得的数据经过跨站脚本过滤(XSS Filtering),把第二个参数设为TRUE。

$this->input->post('some_data', TRUE);

To return an array of all POST items call without any parameters.

To return all POST items and pass them through the XSS filter set the first parameter NULL while setting the second parameter to boolean;

The function returns FALSE (boolean) if there are no items in the POST.

$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
$this->input->post(); // returns all POST items without XSS filter

$this->input->get()

此方法类似post方法,用来取得get数据:

$this->input->get('some_data', TRUE);

如果没有设置参数将返回GET的数组

如果第一参数为NULL,且第二参数为True,则返回经过跨站脚本过滤(XSS Filtering)的数组。

如果没有设从GET中取到数据将返回 FALSE (boolean)

$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
$this->input->get(); // returns all GET items without XSS filtering

$this->input->get_post()

这个方法将会搜索POST和GET方式的数据流,首先以POST方式搜索,然后以GET方式搜索:

$this->input->get_post('some_data', TRUE);

$this->input->cookie()

此方法类似post方法,用来取得cookie数据:

$this->input->cookie('some_data', TRUE);

$this->input->server()

此方法类似上面两个方法,用来取得server数据:

$this->input->server('some_data');

$this->input->set_cookie()

设置一个 Cookie 的值。这个函数接收两种形式的参数:数组形式和参数形式:

数组形式

用这种形式的话,第一个参数传递的是一个关联数组:

$cookie = array(
    'name'   => 'The Cookie Name',
    'value'  => 'The Value',
    'expire' => '86500',
    'domain' => '.some-domain.com',
    'path'   => '/',
    'prefix' => 'myprefix_',
    'secure' => TRUE
);

$this->input->set_cookie($cookie);

说明:

只有 name 和 value 是必须的。可以通过将 expire 设置成空来实现删除 Cookie 的操作。

Cookie 的过期时间是以为单位来设置的,他是通过将 Cookie 的存续的时间值加上当前系统时间来得到的。切记,expire 的值仅仅设置为Cookie 需要存续的时间长短,请不要将当前的系统时间加上存续时间后再赋给变量。如果将 expire 设置成零,那么 Cookie 仅在浏览器关闭的时候失效。

For site-wide cookies regardless of how your site is requested, add your URL to the domain starting with a period, like this: .your-domain.com

The path is usually not needed since the function sets a root path.

The prefix is only needed if you need to avoid name collisions with other identically named cookies for your server.

The secure boolean is only needed if you want to make it a secure cookie by setting it to TRUE.

参数形式

If you prefer, you can set the cookie by passing data using individual parameters:

$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);

$this->input->ip_address()

返回当前用户的IP。如果IP地址无效,返回0.0.0.0的IP:

echo $this->input->ip_address();

$this->input->valid_ip($ip)

测试输入的IP地址是不是有效,返回布尔值TRUE或者FALSE。 注意:$this->input->ip_address()自动测试输入的IP地址本身格式是不是有效。

if ( ! $this->input->valid_ip($ip))
{
     echo 'Not Valid';
}
else
{
     echo 'Valid';
}

$this->input->user_agent()

返回当前用户正在使用的浏览器的user agent信息。 如果不能得到数据,返回FALSE。

echo $this->input->user_agent();

See the User Agent Class for methods which extract information from the user agent string.

$this->input->request_headers()

在不支持apache_request_headers()的非Apache环境非常有用。返回请求头(header)数组。

$headers = $this->input->request_headers();

$this->input->get_request_header();

返回请求头(request header)数组中某一个元素的值

$this->input->get_request_header('some-header', TRUE);

$this->input->is_ajax_request()

检查服务器头HTTP_X_REQUESTED_WITH是否被设置,并返回布尔值。

$this->input->is_ajax_request()

$this->input->is_cli_request()

Checks to see if the STDIN constant is set, which is a failsafe way to see if PHP is being run on the command line.

$this->input->is_cli_request()

 

最后修改: 2012-04-27 10:42:28