2015-12-09 3 views
0

У меня есть следующая ситуация, когда мне нужно добавить несколько значений от $usuario до $_SESSION. Вот один из способов сделать это, однако, громоздко, поскольку $user имеет слишком много полей.

$_SESSION['logado_ecse'] = true; 
$_SESSION['user']   = $usuario['login']; 
$_SESSION['usuario_id']  = $usuario['id']; 
$_SESSION['habilitada']  = $usuario['habilitada']; 
$_SESSION['bloqueada']  = $usuario['desbloqueada']; 
$_SESSION['administrador'] = $usuario['administrador']; 
       .... 
$_SESSION['auditor']  = $usuario['auditor']; 

Я искал более элегантное решение, где в одну строку, я мог бы сделать то же самое, как, например, что-то вроде этого, но это решение не работает, как ожидалось.

$_SESSION = array_merge($usuario, $_SESSION); 

переменная $ Новичок следующим образом

echo gettype($usuario); 
array 

var_dump($usuario); 
array (size=34) 
    'id' => string '1' (length=1) 
    0 => string '1' (length=1) 
    'login' => string 'admin' (length=5) 
    1 => string 'admin' (length=5) 
    'auditor' => string '0' (length=1) 
    2 => string '0' (length=1) 

       ... 
    'telefone2' => string '11' (length=2) 
    14 => string '11' (length=2) 

Мне нравится решение @ KV, я думаю, что я собираюсь реализовать его как функцию. До сих пор, моя идея состоит в том, что $_SESSION является контейнером для «пользователя», поэтому решение, как

$_SESSION['USER']=$usuario 

будет фрагментировать данные пользователя в два

$_SESSION['some_name'] 
$_SESSION['USER']['some_name'] 

, не говоря уже о том, что я придется переформатировать другие части кода.

+3

Почему не просто '$ _SESSION ['USER'] = $ usuario;' –

ответ

1
foreach($usuario as $k => $user) if(is_string($k)) $_SESSION[$k] = $user; 
+0

Обычно полезно добавить описание того, что делает код, а не просто предоставлять раздел кода. –

+0

@XO Ну, код делает то, что спрашивает ОП. Одна строка кода для установки сеансовых варов. –

3

Вы можете нажать $usuario массив на $_SESSION массив так:

$_SESSION['user_details'] = $usuario; 

И после этого вы можете получить информацию о пользователе, как это:

echo $_SESSION['user_details']['login']; 
echo $_SESSION['user_details']['id']; 
echo $_SESSION['user_details']['habilitada']; 
... 
echo $_SESSION['user_details']['auditor']; 
0
<?php 
$_SESSION['user'] => Array(
'userid'=> '123', 
'username'=> 'some_joe', 
'role' => 'customer', 
'website' => 'http://www.example.com' 
); 

// reading values from array 
$userid = $_SESSION['user']['userid']; 
$username = $_SESSION['user']['username']; 
// etc. etc. 

// adding values to array 
$_SESSION['user']['something'] = "Foo"; 
$_SESSION['user']['somethingelse'] = $bar; 

// Adding via function 
Set_Session('user', array('var'=> 'value')); 

// determine if session has started 
Function HasSessionStarted() { 

    $result = false; // default to false 

    // Check if session has started 
    IF ((session_status() == PHP_SESSION_NONE) || (session_id() == '')) { 
     $result = true; 
    } 

    return $result; 

} 

// Set a session value 
Function Set_Session($name, $value) { 
    /* @params value: can be a string or an array */ 
    $new_session = HasSessionStarted(); // Check Session Status 

    IF ((isset($name)) && (isset($value))) { 
     IF ($new_session) { session_start(); } 
     $_SESSION[$name] = $value; 
     IF ($new_session) { session_write_close(); } 
    } 

} 

Function Unset_Session($name) { 

    $new_session = HasSessionStarted(); // Check Session Status 

    IF (isset($_SESSION[$name])) { 
     IF ($new_session) { session_start(); } 
     unset($_SESSION[$name]); 
     IF ($new_session) { session_write_close(); } 
    } 

} 
?> 
0

просто присвоить $ Новичок к переменной сеанса:

$ _SESSION ['user'] = $ usuario;