为什么会话会在此行中自动终止/销毁?

时间:2014-02-14 08:30:49

标签: php codeigniter session

我的这两行功能:

function buildmenu($iduser){
    $ghead  = $this->mnu->get_head()->result();
    $i = rand(0,100);
    $menu   = "";
    foreach ($ghead as $h){
        $i++;
        $access = $this->mnu->get_access($h->IDMenu,$iduser)->row()->Access;
        if ($access != "0"){
            $menu   .= "<li class='hasSubmenu glyphicons $h->MenuIcon'>";
            $menu   .= "<a data-toggle='collapse' href='#mnu_systemtea$i'><i></i><span> $h->MenuDesc </span></a>";
            $menu   .= $this->buildchild($i,$h->IDMenu,$iduser);
            $jmlchild= $this->mnu->get_jml_child($h->IDMenu);
            $menu   .= "<span class='count'>$jmlchild</span>";
            $menu   .= "</li>";              
        }
    }
    return $menu;
}
function buildchild($i=NULL,$idparent,$iduser){
    $tchild = $this->mnu->get_child($idparent)->result();
    $int    = rand(5000,6000);        
    if ($tchild != NULL){

            $child  = "<ul class='collapse' id='mnu_systemtea$i' >";
            foreach ($tchild as $c){
                $access = $this->mnu->get_access($c->IDMenu,$iduser)->row()->Access;
                $int++;
                if ($access != '0'){
                    if ($c->HasSubMenu == 1){
                        $child  .= "<li class='hasSubmenu'>";
                        $child  .= "<a data-toggle='collapse' href='#mnu_systemtea$int'><span>$c->MenuDesc </span></a>";
                        $child  .= $this->buildchild($int,$c->IDMenu,$iduser);
                        $jmlchild = $this->mnu->get_jml_child($c->IDMenu);
                        $child  .= "<span class='count'>$jmlchild</span>";                        
                        $child  .= "</li>";
                    }
                    if ($c->HasSubMenu == 0){
                        $cek_this_parent = $this->mnu->get_menu($idparent)->row()->IDParent;
                        if ($cek_this_parent == 0){
                            $child  .= "<li>";
                            $child  .= "<ul>";
                            $child  .= "<li>";
                            $child  .= "<a url-mod='$c->URLMod' url-det='$c->URLDet' ><span> $c->MenuDesc </span></a>";
                            $child  .= "</li>";
                            $child  .= "</ul>";
                            $child  .= "</li>";
                        }
                        else{
                            $child  .= "<li>";
                            $child  .= "<a url-mod='$c->URLMod' url-det='$c->URLDet' ><span> $c->MenuDesc </span></a>";
                            $child  .= "</li>";
                        }
                    }                        
                }
            }
            $child  .= "</ul>";
            return $child;
        }            

    }

我调用函数buildmenu()并将其插入到会话变量中:

function sess_menu(){
     $menu = $this->buildmenu("0579120613");
     $this->session->set_userdata('sess_menu',$menu);
}
function index(){
echo $this->session->userdata('sess_menu'); // i echo menu here
}

第一次调用buildmenu()函数时显示由index()函数构建的菜单,但是第二次,依此类推,sess_menu会话为空。它就像它被摧毁了。会话有什么问题吗?控制器和模型之间的连接可以使任何会话被破坏吗?

1 个答案:

答案 0 :(得分:0)

您使用的是数据库会话还是cookie?如果您使用cookie并且会话数据太大,您可能会丢失会话并重新生成新会话。

检查$config['sess_use_database'] = TRUE;

同时启用探查器$this->output->enable_profiler(TRUE);,以便在会话丢失会话出现任何问题时,您的会话ID是否正在发生变化。