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中
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)
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个控制器
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)
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[]数据不会出现!
$ _SESSION变量可能不在cookie本身,但PHP仍然需要能够跟踪用户的会话,以便$ _SESSION变量是持久的,并且它使用cookie进行跟踪.
如果关闭cookie,PHP会尝试通过在URL中传递会话变量来保持会话状态,但它不是非常可靠.
底线 - 如果您想在网络环境中使用会话数据,则需要启用Cookie.抱歉.
你说你不能使用cookies,但你没有真正解释原因.这些天人们想要关闭cookie是相当不寻常的,因为它们几乎无处不在.
我们可以使用$_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
有效!