2012-01-02 116 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