1

为什么我的 cookie 没有加密?我将它们视为纯文本,我可以轻松编辑它们,因为它是纯文本:O

我在用着:

    $config['sess_cookie_name']     = 'sess_id';
    $config['sess_expiration']      = 0; //24hours -> 8640
    $config['sess_expire_on_close'] = TRUE;
    $config['sess_encrypt_cookie']  = TRUE;
    $config['sess_use_database']    = TRUE;
    $config['sess_table_name']      = 'session';
    $config['sess_match_ip']        = FALSE;
    $config['sess_match_useragent'] = TRUE;
    $config['sess_time_to_update']  = 3000000000;
$config['encryption_key'] = 'dfs78fh834fh83h4fhhsdifsihdfh99inf83kjwnefkjwenfknwkejnfowejnf82';

并设置 cookie 我使用如下所示的钩子:

function setUserCountry($country){

    $CI =& get_instance();
    $CI->input->set_cookie(
      array(
        'name'=>'user_country',
        'value'=>str_replace(array('"',"'",">","<"),"",$country),
        'expire'=>'8650000000',
        'secure'=>TRUE
        ));
    }

这个钩子叫做 pre_controller:

$hook['pre_controller'] = //run my cookie hook setUserCountry() method

这就是创建 cookie 后的样子:

在此处输入图像描述

4

2 回答 2

4

要在 codeigniter 中加密 cookie,请在 config.php 文件中进行更改

$config['sess_encrypt_cookie']  = FALSE;

将此行更改为

$config['sess_encrypt_cookie']  = TRUE;

还将加密密钥设置为

$config['encryption_key'] = "";
于 2013-04-27T10:06:34.017 回答
1

因此,您将一个数组提供给 set_cookie() $name 参数,其中secure = true。

if ($secure == FALSE AND config_item('cookie_secure') != FALSE)
        {
            $secure = config_item('cookie_secure');
        }

system/core/Input.php 中的这段代码会导致问题。因此,除非您关闭全局 cookie 加密或在数组中省略 $secure,否则它应该可以工作。

编辑
Cookie 未设置,codeigniter 正确指出了问题

不过,您需要加载 cookie 帮助程序。此外,请改用 post_controller_constructor 挂钩。 http://ellislab.com/codeigniter/user-guide/general/hooks.html

另外,使用这种方式不是更好吗?http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY 并将您的 cookie 添加到扩展核心控制器。

于 2013-04-27T14:39:38.190 回答