Codeigniter,$ _SESSION数组

mem*_*nto 0 php cookies session codeigniter

我正在尝试在Codeigniter中使用原生$ _SESSION数组,因为我不能使用$ _COOKIES数组,所以我创建了自己的类但似乎Codeigniter继续保存cokkies数据导致如果我禁用浏览器cookie我无法检索$ _SESSION数据:O !! 不可思议....我不明白为什么?codeigniter是停止还是删除所有设置的$ _SESSION数据?

是否有人仍然只使用$ _SESSION数组,中止默认的$ _COOKIE数组选项?我的意思是,我希望会话数据不是cookie数据,但似乎是不可能的:哦!!! ?? !!

我已将CI原始Session.php库重命名为Cookie.php,而且我将两个个人类重命名为应用程序/库,并将其默认加载到autoloader.php中

1)个人图书馆 - Session.php

session_start();

class Session {


     function set_data($key,$data)
    {

      if(!$key)
      { echo 'first param passed is null in session set_data';}
      if(!$data)
      { echo 'second param passed is null in session set_data';}
     if(isset($key) && isset($data))
     {
         if(isset($_SESSION[$key]))
         {
             unset($_SESSION[$key]);
         }

      return $_SESSION[$key] = $data;


     }
  function keep_data($key)
    {

       if(!$key)
      { echo 'first param passed is null in session keep_data';}

       if(isset($_SESSION[$key]))
       {
         return htmlentities($_SESSION[$key]);
       }
    }
Run Code Online (Sandbox Code Playgroud)

2)个人图书馆 - Settings.php

class Settings {


     function setsitelanguage()
    {
        $CI =& get_instance();

        if($CI->session->keep_data('lang'))
        {
            $CI->config->config['language'] = $CI->session->keep_data('lang');
        }
        else
        {
          $CI->config->config['language'] = "en";
        }

    } 
Run Code Online (Sandbox Code Playgroud)

比我有2个控制器


1)Controller Home.php

class Home extends Controller {

    function Home()
    {

        parent::Controller();

               $this->settings->setsitelanguage();

        }


    function index()
    {
        $this->load->view('home/home_view');

    }
        function session()
        {
           echo   $this->session->keep_data('lang');
        }

} 
Run Code Online (Sandbox Code Playgroud)

2)控制器Auth.php

class Auth extends Controller {


     function usersetlang()
    {

               $lang = $this->uri->segment(3);

              return $this->session->set_data('lang',$lang);





        }
}
Run Code Online (Sandbox Code Playgroud)

如图所示http://mysite/index.php/home/session,我可以通过auth.php检索我的语言网站存储的session.php唯一的问题是使用全局是不够的$_SESSION[],因为如果我尝试检索数据禁用我的浏览器cookie $_SESSION[]数据不会出现!

Spu*_*ley 6

$ _SESSION变量可能不在cookie本身,但PHP仍然需要能够跟踪用户的会话,以便$ _SESSION变量是持久的,并且它使用cookie进行跟踪.

如果关闭cookie,PHP会尝试通过在URL中传递会话变量来保持会话状态,但它不是非常可靠.

底线 - 如果您想在网络环境中使用会话数据,则需要启用Cookie.抱歉.

你说你不能使用cookies,但你没有真正解释原因.这些天人们想要关闭cookie是相当不寻常的,因为它们几乎无处不在.


jro*_*avo 5

我们可以使用$_SESSION如果我们这样做session_start(); 的事情是,$_SESSION不会在codeigniter上的页面上工作.

快速解决:

由于mvc中的页面是由控制器触发的,我们可以这样做

public function __construct(){
    self::$instance =& $this;
    foreach (is_loaded() as $var => $class) {
        $this->$var =& load_class($class);
    }

    $this->load =& load_class('Loader', 'core');

    $this->load->initialize();

    log_message('debug', "Controller Class Initialized");
    session_start();
}
Run Code Online (Sandbox Code Playgroud)

CI_Controller上课system/core/Controller.php

有效!