我在CodeIgniter中有关于会话的问题。 我在Login / submit中初始化一个会话 然后,如果用户已登录,我必须检查另一个控制器。 所以我会用:
if ( $this->session->userdata('login_state') == FALSE ) {
$this->load->view('header'); // no session established, kick back to login page
}
问题是在我要检查login_state的控制器中,我不能使用$this->session
变量。
如果我在此控制器中加载会话库,我将初始化一个新会话,$this->session->userdata('login_state')
将始终为false。
我试过了:
$ci = & get_instance();
$ci->session->userdata('login_state');
但它不起作用。我不知道为什么.. 我不会创建一个类来共享会话变量。是否有通过控制器传递会话变量的明确方法?
登录控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
public function submit() {
$this->load->library('session');
// Prendo i dati passati dal form
$username = $this->input->post('username');
$password = $this->input->post('password');
// read user's credentials from db, through Login Model
if ( $username == "my_username" && $password == "my_password" ) {
$this->session->set_userdata('login_state', TRUE);
}
else {
redirect( '/' ); // redirect back to login page
}
}
ragazze控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Ragazze extends CI_Controller {
public function search()
{
if ( $this->session->userdata('login_state') == FALSE ) {
$this->load->view('header'); // no session established, kick back to login page
}
else{
$this->load->model('ragazza_model');
#Prelevo il valore passato tramite post
$nome_ragazza=$this->input->post('nome');
if ($nome_ragazza) {
$nome_ragazza = $this->ragazza_model->get_girl_by_name($nome_ragazza);
}
$data['nome_ragazza'] =$nome_ragazza;
$this->load->helper('form');
$this->load->model('ragazza_model');
$this->load->helper('url');
$this->load->library('form_validation');
$this->form_validation->set_rules('nome', 'Nome', 'required');
if ($this->form_validation->run() == FALSE){
//Questo viene eseguito anche quando il form
//non `e compilato, cio´e la prima volta che si -
//la pagina con il form html
$this->load->view('header');
$this->load->view('menu');
$this->load->view('ragazze/search',$data);
$this->load->view('footer');
}
else{
//Se i controlli sono positivi, redireziono l' -
$this->load->view('header');
$this->load->view('menu');
$this->load->view('ragazze/search',$data);
$this->load->view('footer');
}
}
}
的config.php
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
编辑:好的,我发现了一些有趣的东西。如果我使用Explorer ..Everythings的作品..所以问题是Firefox ..我不知道为什么。你能帮忙吗?
编辑:我尝试了很多东西..但最后mybe这是我的Firefox的cookie问题。我删除了我的cookie,现在会话似乎有效。真的,我不知道问题是否是这个。我在配置中也改变了一些东西但是在删除我的cookie之前它没有用。所以,伙计们,如果你对Firefox有同样的问题(因为在资源管理器会话中,所以相同的代码,工作)尝试删除你的cookie。如果有人对这个奇怪的事情有了答案,我会很感激。
答案 0 :(得分:0)
在autoload.php配置文件中,自动加载会话,如下所示:
$autoload['libraries'] = array('session');
现在你再也不加载它了,你也没有通过&#34;会话变量。它们随处可用。