用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1549|回复: 6
收起左侧

[HELP] 请问一些常用的变量数据用什么方式保存呢?

[复制链接]
发表于 2016-5-26 22:27:27 | 显示全部楼层 |阅读模式
比如一个网站,登录后,的UID,和用户名、昵称、权限等信息,可能每个控制器或者model都会经常用用到,这种用什么方式保存比较好呢?
cookie感觉不太好,session有过期时间。
再比如用户的登录IP地址,或者其他经常会反复重用的数据能否直接设置个全局的变量来保存,又保证每个用户的信息都不一致,互不干扰。而且效率高点?
发表于 2016-5-27 15:42:22 | 显示全部楼层
本帖最后由 Closer 于 2016-5-27 15:43 编辑
无敌BKB 发表于 2016-5-27 15:12
我们现在是这样子的。我跟你描述下我的设计需求
比如我通过一次查询,得到如下结果array( [0] => Array ( ...
PHP复制代码
 
// 原數組處理,取出 id
$data= array(
  0 => array('id'=>101, 'title'='xxx'),
  1 => array('id'=>103, 'title'='xxx'),
  2 => array('id'=>105, 'title'='xxx')
);
 
$id = array();
foreach ($data as $k => $v) {
    $id[ $v['id'] ] = $v['id'];
}
unset($data);
 
$query = $this->db->where_in('id', $id)->get('form_name');
if ($query->num_rows() > 0) {
    return $query->result_array(); // 取出多筆資料
}
 
return array();
 
复制代码
发表于 2016-5-27 10:21:47 | 显示全部楼层
本帖最后由 yuzhigang5460 于 2016-5-27 10:24 编辑

肯定使用session啊, 还有什么怀疑的。 session过期有什么问题? 一般是滑动时间窗口,只要用户一直操作,不会过期。

再说你想怎么滴,还想永久保存用户数据?看样子为了效率还得保存到内存中,那用户多了,你得多大内存?缓存数据库还有LRU机制呢。

所以说, 用session就可以了,php默认session是保存在文件系统的,过期了也会自动删除,满足你大部分需求。全局变量就别考虑了,吃内存。
 楼主| 发表于 2016-5-27 11:13:20 | 显示全部楼层
谢谢啊,作为初学者,找不到人指导,所以这种问题都是我自己瞎想出来的。
现在感觉对CI有了一定的基础,但是因为没人指导,想实际做个小的网站都很困难,很多问题想法不对。
再请教个问题啊。
比如我用sql查询时,意思是根据id来查询返回这一行的信息,但是我一个页面会用到很多条,
现在的调试信息是这样的。数据库:  ciweb (Maindb)   查询: 65 (0.1114 秒)
主要是类似下面这张语句可能会有50条,有没有什么办法合并?id都是随机的,甚至可能会有少量重复。
$this->db->get_where('form_name',array('id'=>101))->row_array();
$this->db->get_where('form_name',array('id'=>105))->row_array();
如果描述复杂的话,麻烦能给推荐个解决思路,我自己去百度也行。@yuzhigang5460
发表于 2016-5-27 11:40:24 | 显示全部楼层
无敌BKB 发表于 2016-5-27 11:13
谢谢啊,作为初学者,找不到人指导,所以这种问题都是我自己瞎想出来的。
现在感觉对CI有了一定的基础,但 ...

使用 where_in()

參考 : CI 手冊 - 查詢構造器類
 楼主| 发表于 2016-5-27 15:12:49 | 显示全部楼层
Closer 发表于 2016-5-27 11:40
使用 where_in()

參考 : CI 手冊 - 查詢構造器類

我们现在是这样子的。我跟你描述下我的设计需求
比如我通过一次查询,得到如下结果array( [0] => Array ( id=> 101,title=>XXX),[1 => Array ( id=> 103,title=>XXX)...)这个结果是一个数组,里面的单个元素还是数组。
我需要做一个foreach循环,通过循环得到数组里面的那个id参数,再去做类似这样的查询
$this->db->get_where('form_name',array('id'=>101))->row_array(); 因为第一次得到的数组可能有几十个元素,所有这种循环可能就会有几十次。他是每一次循环来执行一次。
这种我看手册,好像不是where_in的应用啊,我现在代码大概是这样子的。

        $data['list'] = $this->list_model->get_title_by_id_limit($per_page,$offset);
                        //得到结果结果类似array( [0] => Array ( id=> 101,title=>XXX),[1] => Array ( id=> 103,title=>XXX),[2] => Array ( id=> 108,title=>XXX)...)
                       
        foreach($data['list'] as $key => $val){

            $data['list'][$key]['info'] = $this->list_model->get_info_by_uid($val['id']);
                        //将得到的结果,给数组$data['list'][$key]['info'],

        }
 楼主| 发表于 2016-5-29 17:28:05 | 显示全部楼层

谢谢啊,通过你说的方法,把循环娶了,把原来的65次数据库查询,变成了5次了

本版积分规则