PHP范围?还是密码点火器?二者都都不是(我自己的愚蠢?)

PHP范围?还是密码点火器?二者都都不是(我自己的愚蠢?),php,codeigniter,cookies,Php,Codeigniter,Cookies,所以,我对Codeigniter是新手。我已经建立了一个模型类来处理用户授权,用于在数据库中存储令牌和在cookie中存储索引。我将cookie设置为类的属性,但似乎无法将其存储。这是我最可能愚蠢的问题之一(见标题),但我不知所措。以下是相关代码: class Auth_model extends CI_Model { public function __construct() { parent::__construct(); // Include f

所以,我对Codeigniter是新手。我已经建立了一个模型类来处理用户授权,用于在数据库中存储令牌和在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;
    }
}
类身份验证模型扩展了CI模型{ 公共函数构造(){ 父项::_构造(); //包括来自google php客户端库的文件 包括_once APPPATH.“libraries/google-api-php-client-master/src/google/autoload.php”; 包括_once APPPATH.“libraries/google-api-php-client-master/src/google/client.php”; 包括_once APPPATH.“libraries/google-api-php-client-master/src/google/Service/Oauth2.php”; } var$mm_cookie=数组( 'name'=>'ID', '值'=>'', '到期'=>'86500', '域'=>'', “路径”=>“/”, '前缀'=>'前缀', “安全”=>TRUE ); 公共函数setUserData($p_aUserData){ 日志消息(“调试”,“获取变量:”.print\r($\u GET,true)); //检查现有服务ID 如果(设置($p_aUserData['id']){//检查'id' $SQL=“从tbl_用户选择ID,其中tbl_用户ID=”.$p_aUserData['ID']; $query=$this->db->query($SQL); $result=$query->result(); 如果($query->num\u rows()>0){ $this->mm_cookie['value']=$p_aUserData->ID; ... $SQL=“插入tbl_用户(“[my columns]”)值(“..valueString.”); $query=$this->db->query($SQL); 如果(!$query)$retArray=array('status'=>'error','info'=>array('message'=>$this->db->\u error\u message(),'code'=>$this->db->\u error\u number(),'SQL'=>$SQL)); 否则{ $lastInsertID=$this->db->insert_id(); $this->mm_cookie['value']=$lastInsertID; $retArray=array('status'=>'success','info'=>array('message'=>'INSERT successful','lastInsertID'=>$lastInsertID',SQL'=>$SQL)); } } ==1=>日志消息(“调试”,“存储验证模型的Cookie:”.print\r($this->mm\u Cookie,true)); $this->input->set_cookie($this->mm_cookie); }否则{ $retArray=array('status'=>'error','info'=>array('message'=>“未指定服务ID”); } 返回$retArray; } } 我以前在其他语言中使用过这个基本模式,包括PHP(而不是CI)。要么是我犯了一个我没有看到的愚蠢的错误,要么是CI有点古怪。我不熟悉PHP名称空间,但我不知道这会有什么影响

很抱歉,额外的原油,但我想展示一切,以防有什么我搞砸了

在代码“==1==>”中我的标记处,
$this->mm_cookie
数组的显示与我预期的一样。下一行永远不会产生cookie。似乎如果我不将它作为类的属性,它就可以工作。我已将其设定为公共和私人财产

我想知道为什么它不能作为一种财产使用,以及我是否做了一些主要错误的事情,这些错误会在以后的过程中更加明显地暴露出来


Scott。

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

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

我假设您没有自动加载帮助程序。

没有设置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";
}

如果您经常使用cookies,请阅读手册,最好将其加载到config文件夹中的
autoload.php
文件中

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

为什么不在函数
setUserData($p\u 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版本?

您在问为什么
$this->input->set_cookie(…)
即使在打印时清楚地显示了正确的数据,也不设置数组?它可以是任何东西:你的浏览器阻止cookies,这是CodeIgniter的bug,你错误配置了CI,你以前打印了一些东西,所以标题不能更改。。。等等。实际上,我在问为什么作为类属性的数组没有被设置为cookie。除非你是这个意思。你的回答实质上是重复我的问题。我的浏览器不阻止cookies。CI会话cookie设置得很好。错误配置CI当然是可能的,但这是唯一一个行为怪异的地方。事实上,我确实在控制器中加载了cookie助手。不过接得好。那么,放这些东西最好的地方是哪里?控制器?模型自动加载程序?如果您将其放置在自动加载文件中,它将包含在所有控制器中,如果您将其包含在控制器构造函数中,它将仅包含该控制器感谢最佳实践。我现在已经将其添加到autoload.php中。仍然没有存储cookie。已将其添加到autoload.php中。还是没有乐趣。你能更新你的代码吗?您最近在建议之后所做的更改?运行5.6.7。我已经尝试将其设置为setUserData()方法的本地,但没有成功。我制作的mod实际上只是将helper添加到autoload.php中:
$autoload['helper']=array('url','cookie','date')