[英]how to pass session in controllers
我在CodeIgniter中遇到有關會話的問題。 我在“登錄/提交”中初始化會話,然后,我必須在另一個控制器中簽入用戶是否已登錄。 所以我會用:
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 ..一切正常..那么問題是Firefox ..我不知道為什么。 你能幫我嗎?
編輯:我嘗試了很多事情..但最后我只是那是我的firefox的cookie問題。 我刪除了所有我的cookie,現在該會話似乎可以正常工作了。 真的,我不知道問題是否出在此。 我在配置中也做了一些更改,但是在刪除我的cookie之前它沒有用。 伙計們,如果您在Firefox上遇到我同樣的問題(導致在Explorer中進行會話,所以同樣的代碼起作用了),請嘗試刪除Cookie。 如果有人對這個奇怪的事情有答案,我將不勝感激。
在您的autoload.php配置文件中,自動加載會話,如下所示:
$autoload['libraries'] = array('session');
現在,您無需再次加載它,也不必“傳遞”會話變量。 它們只是隨處可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.