所以,我是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。似乎如果我不把它变成类的属性,它就可以了。我把它设置为公共和私有财产。
我想知道为什么它不能作为一种财产工作,如果我做了一些主要错误的事情,那么在这个过程的后期就会显得更加明显。
斯科特。
答案 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)