PHP Session Class返回值

时间:2013-03-01 14:23:59

标签: session-variables php

我有一个简单的会话类(下面):

class Session{

    public static function init(){
            @session_start();
        }

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

    public static function get($key){
      if (isset($_SESSION[$key])) {
        return $_SESSION[$key];
       } else if(empty($key)){
        return $_SESSION;
       }

    }

    public static function destroy(){
        session_destroy();
    }

 }

要设置单个会话值,请使用

  Session::set(Name, value);

要设置多个会话值,请使用

  Session::set(Name, array(name, value....));

然后简单地检索我需要使用的会话:

  Session::get(Name);

现在我的问题是,当我可以设置多维值时,我实际上无法使用上面的当前get函数获取它们。那我怎么能重新构造我的get($ key),这样它不仅可以返回单个请求,还可以返回任何请求

  Session::set('joe', 'bloggs');
  Session::set('beth', array('age'=>'21','height'=>'5.5ft'));

因此,例如我再次得到一个会话值EG Joe:

    Session::get('joe');

然后,如果我想得到beth的详细信息,我可以将会话值分配给var,然后像下面这样访问内部细节:

   $age = Session::get('beth');
   $age['age']

但是我可以重建我的get方法:

  Session::get('beth','age');

或者最好坚持我目前正在做的事情。

由于

5 个答案:

答案 0 :(得分:2)

您可以将get方法更新为:

public static function get($key, $item = NULL){
    if (isset($_SESSION[$key])) {
        if(isset($item) && isset($_SESSION[$key][$item])) {
            return $_SESSION[$key][$item];
        }

        return $_SESSION[$key];
    } 

    return NULL; //not found
}

然后你就可以使用它:

Session::get('joe'); // returns array
Session::get('joe', 'age'); // returns joe's age

答案 1 :(得分:1)

以下是您的需求

Session::set('joe', 'bloggs');
Session::set('beth', array('age' => '21','height' => '5.5ft','ball' => array("A" => "blue","B" => "Green")));

var_dump(Session::get("beth", "age")); // returns 21
var_dump(Session::get("beth", "ball", "A")); // returns blue

您的课程已修改

class Session {

    private static function init() {
        if (session_status() != PHP_SESSION_ACTIVE)
            session_start();
    }

    public static function set($key, $value) {
        self::init();
        $_SESSION[$key] = $value;
    }

    public static function get() {
        self::init();
        $args = func_get_args(); // Get all arguments
        $items = $_SESSION; // create a tempoary version of $_SESSION aarray
        foreach ( $args as $ndx ) {
            // Take Item and override with Subitem
            $items = isset($items[$ndx]) ? $items[$ndx] : null;
        }
        return $items;
    }
}

答案 2 :(得分:0)

小心点。这可能让我们中的一些人感到困惑,因为在某些框架中,getter中的第二个参数意味着默认值

Session::get('key', 'defaultValue');
如果密钥不存在,将返回

defaultValue

可能不是最好的解决方案,但您可以将set的所有内容转换为特殊类(可能称为KeyValue或其他),当您使用get时,您可以返回值密钥 OR 另一个KeyValue对象,执行次数为get(),再次执行相同操作,返回值 OR 另一个KeyValue 。这样,您就可以以相当酷的方式链接方法:

Session::get('beth')->get('age')

答案 3 :(得分:0)

这样的功能可以使用无限数量的键:

public static function get()
{
    $array = $_SESSION;
    $keys = func_get_args();
    foreach($keys as $key)
    {
        if(isset($array[$key]))
            $array = $array[$key];
        else
            return FALSE; // or it could return array()
    }

    return $array;
}

答案 4 :(得分:0)

在Core PHP或其他任何PHP框架中,用于显示SESSION中的所有数据

   print_r($_SESSION);
   public function setSessionValue($session_name, $session_value){
         $_SESSION[$session_name] = $session_value;
   }

   public function getSessionValue($session_name){
         return $_SESSION[$session_name];
   }