2016-02-27 98 views
0

所以我做了一个注册页面,我也使用会话来刷新消息。 这个会话被称为'flash',我为会话做了一个抽象类,以使它更容易。PHP会话不能在另一个页面上使用数组

这是我的会话类:

public static function exists($name) 
{ 
    return (isset($_SESSION[$name]) ? (true) : (false)); 
} 

public static function set($name, $value) 
{ 
    return $_SESSION[$name] = $value; 
} 

public static function delete($name) 
{ 
    if(self::exists($name)) { 
     unset($_SESSION[$name]); 
    } 
} 

public static function get($name) 
{ 
    if(self::exists($name)) { 
     return $_SESSION[$name]; 
    } 
    return ''; 
} 

public static function hasFlash() 
{ 
    return (Session::exists('flash') ? (true) : (false)); 
} 

public static function addFlash($message) 
{ 
    if(Session::exists('flash')) 
    { 
     $msgArray = (Array) Session::get('flash'); 
     array_push($msgArray, $message); 
     Session::set('flash', (Array) $msgArray); 
    } 
    else 
    { 
     $msgArray = array(); 
     array_push($msgArray, $message); 
     Session::set('flash', (Array) $msgArray); 
    } 
} 

public static function flash($message = null) 
{ 
    if(self::hasFlash()) { 
     $msgArray = (Array) Session::get('flash'); 
     Session::delete('flash'); 
     foreach($msgArray as $message) { 
      echo $message . "<br>"; 
     } 
    } 
    return ''; 
} 

这是我的注册页面:

$hasError = false; 
     $username = Functions::escape(Input::get('user')); 
     $password = Functions::escape(Input::get('password')); 
     $email = Functions::escape(Input::get('email')); 
     $nick = Functions::escape(Input::get('nick')); 

     if(User::userExists($username, $db)) { 
      Session::addFlash("User $username is taken, try another one."); 
      $hasError = true; 
     } 

     if(User::emailExists($email, $db)) { 
      Session::addFlash("Email $email is taken, try another one."); 
      $hasError = true; 
     } 

     if(!$hasError) 
     { 
      User::addUser($username, $email, $password, $nick, $db); 
      Session::addFlash("You have successfully registered."); 
      Session::addFlash("You can now login with $username."); 
      Functions::location("index.php"); 
     } 

这是我使用的显示提示信息代码:

<?php if(Session::hasFlash()) : ?> 
      <div class="form-group"> 
       <?php Session::flash(); ?> 
      </div> 
     <?php endif; ?> 

然而,它只适用于注册页面,例如当用户输入用户名/电子邮件时,当我注册用户并将他发送到索引页时,上面的代码将显示消息,但不会显示2条成功消息。我的页面顶部有session_start。

+0

具有u试图忽略返回“”;从闪光灯功能结束? –

+0

是的,它不起作用。虽然当我简单地设置$ _SESSION ['msg'] =“test”;它可以在任何页面上工作,但是由于一些奇怪的原因,数组不会显示在任何页面上。 – user3701230

回答

0

的问题似乎是通过添加以下来解决:

// server should keep session data for AT LEAST 1 hour 
ini_set('session.gc_maxlifetime', 3600); 

// each client should remember their session id for EXACTLY 1 hour 
session_set_cookie_params(3600); 
相关问题