CodeIgniter会话未设置

时间:2013-12-17 12:57:30

标签: php codeigniter session

我正在使用会话制作一个多阶段表单,我想使用codeIgniter会话通过每个阶段记录信息,然后在最后将会话信息全部输入到数据库中。

我想要做的是从表单中的第1阶段开始,在输入框中输入一个数字,提交它,通过帖子获取输入数字并从会话中的帖子设置该数字。然后在第2阶段从会话中获取信息并简单地回应它,然后至少我知道它正在工作。

我让我的代码工作得更早了,但在移动它并清除chrome中的缓存后,它突然停止工作,我看不到任何错误。请注意我在使用chrome,但我也在firefox和ie中尝试过这个。我正在使用config / autoload加载会话库,并在配置中设置了加密密钥。我试过关闭铬并重新打开它。任何帮助都将非常感激!

控制者:“scholarshiphistory.php”

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Scholarshiphistory extends CI_Controller {
public function __construct(){
    parent::__construct();
    $this->load->model('site_model');
}
//stage 1 of multipart form
public function addhist_selectstudent(){        
    $this->load->helper('form');
    $data = $this->site_model->general();
    $this->load->view('view_addhist_selectstudent',$data);
    $this->load->view('view_footer',$data);
//set session info if user submits
    if($this->input->post('studentSearch')){
        $this->session->set_userdata('studentNationalId', $this->input->post('studentSearch'));
    }
}
//stage 2 of multipart form
public function addhist_scholarshipdetails(){
    if (!$this->session->userdata('studentNationalId')) {
        //no session
        $data["msg"] = "<strong>No session!</strong>";
    } else {
        //get the userinput from the session
        $userinput = $this->session->userdata('studentNationalId');
        $data["msg"] = "ID:". $userinput;
    }
    $this->load->view("view_addhist_scholarshipdetails",$data);
}

查看:第1阶段 - “view_addhist_selectstudent.php”

<?php $formAttributes = array('role' => 'form', 'style' => 'width: 600px;'); ?>
<?php echo form_open('scholarshiphistory/addhist_scholarshipdetails', $formAttributes); ?>
  <div class="form-group">
  <div class="panel panel-default">
    <div class="panel-body">
        <div class="form-group">
            <label for="studentSearch">Student:</label>
            <input type="text" name="studentSearch" class="form-control" id="studentSearchInput" placeholder="student num" value="">
            <br>                            
            <span id="searchResult" class="help-block" ></span>
            <button id="studentSearchBtn" class="btn btn-default">Search</button><!--search button returns info on user input in span above-->              
        </div>          
    </div>
  </div>
<button id="studentSubmitBtn" type="submit" class="btn btn-default" >Next</button> <!--this is the submit button--> 
  </div>
</form>

查看:第2阶段 - “view_addhist_scholarshipdetails”

<?php echo $msg; ?>

当我运行代码时,我进入视图'view_addhist_scholarshipdetails',它在控制器的函数addhist_scholarshipdetails中显示if语句的第一个分支,即“no session”。

1 个答案:

答案 0 :(得分:0)

我移动代码将会话从控制器中的第一个方法设置为第二个方法(也在控制器中),现在它可以正常工作,即使用set_userdata方法设置会话!

第二种方法现在看起来像这样:

//stage 2 of multipart form
public function addhist_scholarshipdetails(){
if($this->input->post('studentSearch')){
    $this->session->set_userdata('studentNationalId', $this->input->post('studentSearch'));
}
if (!$this->session->userdata('studentNationalId')) {
    //no session
    $data["msg"] = "<strong>No session!</strong>";
} else {
    //get the userinput from the session
    $userinput = $this->session->userdata('studentNationalId');
    $data["msg"] = "ID:". $userinput;
  }
  $this->load->view("view_addhist_scholarshipdetails",$data);
}

我之前尝试的方法似乎对这个人没问题:http://runnable.com/UhIVTnEfFJEMAAB5 但我认为这是因为他没有以同样的方式设置会议。

非常感谢回答这个问题的那些人。