PHP назначает несколько массивов $_SESSION

У меня проблема при настройке сеансов, когда я устанавливаю: $_SESSION["predefinedvar"] = "SOMETHING" Он запоминает переменную сеанса, но, однако, когда я делаю: $_SESSION = $class->somearray; Он не сохранит массив сеансов.

Я провел поиск в Интернете и попробовал первые несколько страниц Google из этого поиска: массив назначения сеанса php

Вывод аналогичен этому, когда я выполняю print_r($_SESSION) или print_r($l->details); Это вывод, который дает мне скрипт (как из $_SESSION, так и из $l->details)

Array
(
    [1] => Array
        (
            [id] => 1
            [username] => Usernamehere
            [password] => EnCryptedPasswordHere
            [mail] => [email protected]
            [ip] => ::1
            [registerred] => 1349111531
            [loggedin] => 0
            [vip] => 0
        )

    [2] => Array
        (
            [id] => 1
            [city] => 1
            [family] => 0
            [pm] => 0
            [mod] => 0
        )

    [3] => Array
        (
            [id] => 1
            [url] => images/pb/1.png
        )

    [4] => Array
        (
            [id] => 1
            [rank] => 1
            [subrank] => 5000
        )

    [5] => Array
        (
            [id] => 1
            [hp] => 100
            [str] => 0
            [def] => 0
        )

    [6] => Array
        (
            [id] => 1
            [money] => 0
            [bank] => 0
            [bullets] => 0
            [points] => 0
        )

)

В настоящее время у меня есть следующие коды

логин.c.php

<?php
if(!$required) die("Du har ikke adgang til denne filen.");

class login {

    var $username, $password;
    var $details;
    var $salt = "SALTHIDDEN";
    var $error;
    var $justcheck;

    function onPost($username, $password, $justcheck = FALSE) {
        if($justcheck) $this->justcheck = $justcheck;
        if(!$username || !$password) die("Du må skrive inn både brukernavn og passord.");
        $this->username = htmlspecialchars(addslashes($username));
        $this->password = sha1(md5($this->salt . $password));
    }

    function checkDetails() {
        $query = mysql_query("SELECT * FROM users WHERE username = '".$this->username."' AND password = '".$this->password."' LIMIT 1");
        $num = mysql_num_rows($query);
        if($num > 0) {
            $this->details[1] = mysql_fetch_assoc($query);
            return TRUE;
        }
        else {
            $this->error[] = "Feil brukernavn eller passord.";
            return FALSE;
        }
    }

    function getEverything() {
        $this->details[2] = mysql_fetch_assoc(mysql_query("SELECT * FROM user_c WHERE id='".$this->details[1][id]."' LIMIT 1"));
        $this->details[3] = mysql_fetch_assoc(mysql_query("SELECT * FROM user_p WHERE id='".$this->details[1][id]."' LIMIT 1"));
        $this->details[4] = mysql_fetch_assoc(mysql_query("SELECT * FROM user_r WHERE id='".$this->details[1][id]."' LIMIT 1"));
        $this->details[5] = mysql_fetch_assoc(mysql_query("SELECT * FROM user_s WHERE id='".$this->details[1][id]."' LIMIT 1"));
        $this->details[6] = mysql_fetch_assoc(mysql_query("SELECT * FROM user_i WHERE id='".$this->details[1][id]."' LIMIT 1"));
    }
    function returnValue() {
        if($this->error) foreach($this->error as $e) echo "$e<br />";
        if(!$this->justcheck && !$this->error) die("<a href=\"#main\">Du er nå innlogget som $username<br />Klikk her hvis du ikke viderekobles til hovedkvarteret.</a><meta http-equiv=\"Refresh\" content=\"0; url=#main\">");
    }

}

и этот файл является файлом POST.php:

<?php

require_once("path/hidden/db.php");

switch(key($_GET)) {
    default:
        echo "Nothing to do here";
    break;

    case "login":
        $required = TRUE;
        require_once("path/hidden/login.c.php");
        session_start();
        $l = new login();
        $l->onPost($_POST["username"], $_POST["password"]);
        if($l->checkDetails()) {
            $l->getEverything();
            session_start();
            $_SESSION = $l->details;
        }
        $_SESSION[RandomVar] = "RandomVal";
        //$l->returnValue();
        print_r($_SESSION);
        print_r($l->details);
        //echo session_id();
    break;
}

person Mortenrb    schedule 27.11.2012    source источник
comment
test, чтобы назвать сеанс. $_SESSION['user_details'] = $l-›детали   -  person martin-lundberg    schedule 27.11.2012
comment
Спасибо, только что сделал это, когда увидел ответ от Pé de Leão, и это сработало :)   -  person Mortenrb    schedule 27.11.2012


Ответы (3)


Вам нужно присвоить имя переменной Session. Вы пробовали следующее:

 $_SESSION = $class->somearray

Но вам нужно назначить ключ для вашего массива:

$_SESSION['my_array'] = $class->somearray
person Expedito    schedule 27.11.2012
comment
Ах, так ему недостаточно получить идентификатор из массива? В любом случае, спасибо, все заработало :D - person Mortenrb; 27.11.2012

для хранения массива в сеансе вам нужно связать этот массив с ключом.

например $_SESSION['key']=$array_variable;

person Rubin Porwal    schedule 27.11.2012

Вместо:

$_SESSION = $l->details;

Попробуй это:

foreach($l->details as $strKey => $strValue) {
    $_SESSION[ $strKey ] = $strValue;
}
person TachyonVortex    schedule 27.11.2012