PHP范围?还是Codeigniter?都? (我自己的愚蠢?)

时间:2015-05-07 09:42:40

标签: php codeigniter cookies

所以,我是Codeigniter的新手。我已经设置了一个模型类来处理用户授权,包括在db中存储令牌和在cookie中存储索引。我设置了一个cookie作为该类的属性,但似乎无法将其存储起来。这是我最有可能愚蠢的问题之一(见标题),但我感到茫然。这是相关代码:

class Auth_model extends CI_Model {

    public function __construct() {
        parent::__construct();

        // Include files from google-php-client library
        include_once APPPATH . "libraries/google-api-php-client-master/src/Google/autoload.php";
        include_once APPPATH . "libraries/google-api-php-client-master/src/Google/Client.php";
        include_once APPPATH . "libraries/google-api-php-client-master/src/Google/Service/Oauth2.php";
    }

    var $mm_cookie = array(
        'name'   => 'ID',
        'value'  => '',
        'expire' => '86500',
        'domain' => '',
        'path'   => '/',
        'prefix' => 'pref',
        'secure' => TRUE
    );

    public function setUserData ($p_aUserData) {
        log_message("debug", "GET vars:" . print_r($_GET,true));

        // Check for existing service ID
        if( isset($p_aUserData['id']) ) {           // Check the 'id'
            $SQL = "SELECT ID FROM tbl_user WHERE tbl_user.id = " . $p_aUserData['id'];
            $query = $this->db->query($SQL);
            $result = $query->result();

            if ($query->num_rows() > 0) {
                $this->mm_cookie['value'] = $p_aUserData->ID;

               ...  

                $SQL = "INSERT INTO tbl_user (" [my columns] ") VALUES (" . $valueString . ")";
                $query = $this->db->query($SQL);
                if( !$query ) $retArray = array( 'status' => 'error', 'info' => array('message' => $this->db->_error_message(), 'code' => $this->db->_error_number(), 'SQL' => $SQL ) );
                else {
                    $lastInsertID = $this->db->insert_id();
                    $this->mm_cookie['value'] = $lastInsertID;
                    $retArray = array( 'status' => 'success', 'info' => array('message' => "INSERT successful", 'lastInsertID' => $lastInsertID, 'SQL' => $SQL ) );
                }
            }

== 1 ==>    log_message("debug", "Cookie Storing AUTH_MODEL: " . print_r($this->mm_cookie, true));</b>

            $this->input->set_cookie($this->mm_cookie);
        } else {
            $retArray = array( 'status' => 'error', 'info' => array('message' => "No Service ID specified") );
        }
        return $retArray;
    }
}

我之前使用过这种基本模式,包括PHP(只是非CI)。要么我犯了一个我没见过的愚蠢的错误,要么就是CI的古怪。我是PHP名称空间的新手,但我不知道这会对此产生什么影响。

对不起,但是我想展示一切,以防万一我搞砸了。

代码为#34; == 1 ==&gt;&#34; $this->mm_cookie数组显示正如我所期望的那样。下一行永远不会产生cookie。似乎如果我不把它变成类的属性,它就可以了。我把它设置为公共和私有财产。

我想知道为什么它不能作为一种财产工作,如果我做了一些主要错误的事情,那么在这个过程的后期就会显得更加明显。

斯科特。

3 个答案:

答案 0 :(得分:1)

未设置Cookie,因为您未在构造函数中包含Cookie帮助程序

 public function __construct() {
            parent::__construct();
            $this->load->helper('cookie');
            // Include files from google-php-client library
            include_once APPPATH . "libraries/google-api-php-client-master/src/Google/autoload.php";
            include_once APPPATH . "libraries/google-api-php-client-master/src/Google/Client.php";
            include_once APPPATH . "libraries/google-api-php-client-master/src/Google/Service/Oauth2.php";
}

阅读手册Cookie Helper

答案 1 :(得分:1)

如果您经常使用Cookie,最好在配置文件夹中的autoload.php文件中加载。

$autoload['helper'] = array('cookie');

修改

为什么不在函数setUserData ($p_aUserData)中创建cookie变量?

注意 从声明

中删除var
 $mm_cookie = array(
        'name'   => 'ID',
        'value'  => '',
        'expire' => '86500',
        'domain' => '',
        'path'   => '/',
        'prefix' => 'pref',
        'secure' => TRUE
    );

然后你可以直接使用像

这样的varibale
$this->input->set_cookie($mm_cookie);

来自函数setUserData();

var声明仅适用于从5.0.0到版本5.1.2的PHP版本。您使用的是哪个PHP版本?

答案 2 :(得分:0)

查看代码,您似乎没有从CodeIgniter加载cookie帮助程序。 CI2CI3中的Cookie文档显示您需要通过执行以下操作来加载帮助程序:

$this->load->helper('cookie');

我假设您不是自动加载帮助程序。