kostenloser Webspace werbefrei: lima-city


Session Variablen auch definieren?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    testworld

    testworld hat kostenlosen Webspace.

    Hallo,

    Ich beschäftige mich ja gerade mit OOP und dabei wurde ich heute von einer Notiz:
    Notice: Undefined index: user in /var/www/.../..../htdocs/index.php on line 18

    drauf hingewiesen das in in der Zeile:
    $user = $_SESSION['user'];

    user nicht definiert ist. Aber muss ich denn Sessions auch in der Klasse definieren oder wie macht man das?

    Und allgemein ist es klever bzw. erlaubt Klassen in Sessions zu speichern?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hi,

    einfach per Definition:

    $_SESSION["var"] = $var;


    du musst halt wie immer session_start(); oben reinschreiben ;)

    Nein, das ist nicht gerade clever, weil du dann vor dem session_start(); die klasse eingebunden haben musst und zudem bei großen Klassen die Performance extrem einbricht.

    Grüße

    Daniel
  4. Autor dieses Themas

    testworld

    testworld hat kostenlosen Webspace.

    igruber schrieb:
    Hi,

    einfach per Definition:

    $_SESSION["var"] = $var;


    Ähm,

    du musst halt wie immer session_start(); oben reinschreiben ;)

    Ähm das ist mir schon klar und das
    $_SESSION["var"] = $var;
    mach ich doch in dem Beispiel, ich meine die Varibalen Defnition in Klassen z.B:
    public $username;


    Nein, das ist nicht gerade clever, weil du dann vor dem session_start(); die klasse eingebunden haben musst und zudem bei großen Klassen die Performance extrem einbricht.

    Grüße

    Und wie soll ich es dann machen? Immer wieder eine neue Klasse?...
  5. Hi,

    // edit

    in Klassen kannst du nur fest stehende Werte einbauen:

    public $username = "myname";

    Am besten funktioniert das mit dynamischen Werten über einen Konstruktor:

    <?php
    
    class user {
     public $user;
     public function __construct($user) {
      $this->user = $user;
     }
    }
    
    $user = new User("Daniel");


    hoffe, hab dich nun richtig verstanden, sonst korrigier mich wieder :)

    Zu den Sessions:

    Also entweder das, oder nur die wichtigen Daten aus der Session wieder rausholen.

    Was ich in solchen Fällen mach, ein kleines Script, das auch große Daten schnell auf der Festplatte mit einer id sichert und dann wieder zurückholt..

    Hier mal mein Code:

    <?php
    define("ROOT", "./"); // site-root, for example /www/var/mysite/
    define("cache/"); // cache directory in site-root, for example cache/ for /www/var/mysite/cache/
    
    /**
     * if you want to store very much data in the session, session will slow down page dramatically, so we store just a key and then store it external in a file
     *@name session_store
     *@access public
     *@param string - key
     *@param data
    */
    function session_store($key, $data) {
    	if(isset($_SESSION["store"][$key]))
    		$random = $_SESSION["store"][$key];
    	else
    		$random = randomString(10);
    	// create file
    	$file = new File(ROOT . CACHE_DIRECTORY . $random . ".goma");
    	$file->write(serialize($data));
    	unset($file);
    	$_SESSION["store"][$key] = $random;
    	return true;
    }
    /**
     * gets data from session-store
     *
     *@name session_restore
     *@access public
     *@param string - key
    */
    function session_restore($key) {
    	if(isset($_SESSION["store"][$key]))
    		if(file_exists(ROOT . CACHE_DIRECTORY . $_SESSION["store"][$key] . ".goma"))
    			return unserialize(file_get_contents(ROOT . CACHE_DIRECTORY . $_SESSION["store"][$key] . ".goma"));
    		else
    			return false;
    	else
    		return false;
    }
    /**
     * checks if a store exists
     *
     *@name session_store_exists
     *@access public
     *@param string - key
    */
    function session_store_exists($key) {
    	if(isset($_SESSION["store"][$key]))
    		if(file_exists(ROOT . CACHE_DIRECTORY . $_SESSION["store"][$key] . ".goma"))
    			return true;
    		else
    			return false;
    	else
    		return false;
    }


    Grüße

    Daniel

    Beitrag zuletzt geändert: 11.7.2011 21:34:26 von igruber
  6. testworld schrieb:
    ...
    $user = $_SESSION['user'];
    ... oder wie macht man das?
    so:
    $user = (empty($_SESSION['user'])) ?
      null:
      $_SESSION['user'];
    das ist allerdings nur das 'wie' auf deine frage. ich würde das nicht so reinknallen. (vorher filtern!)

    Und allgemein ist es klever bzw. erlaubt Klassen in Sessions zu speichern?
    geschmacksache. hier ein beispiel.

    lg
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!