2012-01-02 114 views
0

我的問題是,當調用一個包含開關控件的靜態方法時,$ _SESSION變量未被存儲。這裏是我的代碼:沒有存儲變量的會話

class Booking { 

static public function bookCourse() {   
$smarty = SmartySingleton::getInstance(); 
session_start(); 
    if (isset($_POST['step'])) { 
     switch ($_POST['step']) { 
      //step 1 post 
      case 1: 
       //validate      
       $errors = $validator->validateStep1();      
       if ($errors == ""){ 
        $_SESSION['step1'] = 'test'; 
        var_dump($_SESSION); //here it prints test 
        $smarty->display('step2.tpl'); 
       }else{ 
        $smarty->assign('errors', $errors); 
        $smarty->display('step1.tpl'); 
       } 
       break; 
      //step 2 post 
      case 2:      
       $errors = $validator->validateStep2(); 
       if ($errors == ""){ 
        var_dump($_SESSION); //here it prints empty array 
        $_SESSION['step2'] = $_POST; 
        $smarty->display('step3.tpl'); 
       }else{ 
        $smarty->assign('errors', $errors); 
        $smarty->display('step2.tpl'); 
       } 
       break; 

      .... 

有誰知道可能是什麼問題?謝謝!

+1

究竟發生了什麼?你是否確定與作業的界限甚至達到了? – 2012-01-02 13:50:02

+1

在調用這個靜態函數之前,你確定沒有向瀏覽器發送任何輸出嗎?只需要詢問是因爲'session_start()'應該在發送任何其他輸出之前被調用......打開日誌記錄並檢查日誌可以幫助查看是否屬於這種情況(您會得到「頭文件已發送」錯誤消息)。 – wimvds 2012-01-02 13:57:39

回答

2

您必須使用session_start()命令開始會話。

CF:http://php.net/manual/en/function.session-start.php

注:在session_start()應儘早在你的腳本發生。一旦打印出來,它將不再起作用。

+0

謝謝youuu!就是這樣!在我的代碼中早些時候開始會話並開始工作。你救了我! :) – Vika 2012-01-02 13:58:52

+0

@Vika不客氣:) – TimWolla 2012-01-02 13:59:44

0

在案例1中,您已分配$_SESSION['step1'] = 'test';,因此它會打印測試。而在情況2中,沒有分配任何東西。

+0

但不應該從最後一步打印'測試'?因爲會話數據應該保留。我需要能夠保存步驟1中分配的數據以便以後訪問。 – Vika 2012-01-02 13:55:20

+0

你有沒有嘗試在你的PHP代碼的最頂端移動session_start()? – 2012-01-02 13:59:38

+0

就是這樣!謝謝!! – Vika 2012-01-02 14:03:25