Hilfe zur Session-Klasse für Globals=off
Achim
- php
Hallo,
mir hat vor einiger Zeit ein Arbeitskollege mal einen session-Klasse geschrieben (leider erreiche ich ihn nicht mehr da die Firma platt ist.
Nun möchte ich dies Klasse für register_globals=off tauglich machen.
weiter möchte ich nur die superglobals wie $_SESSION verwenden
Da ich untter OOP keine Ahnung habe wäre ich sehr dankbar wenn mir hier jemand ein wenig helfen könnte
Hier mal der Code (später folgt dann der Aufruf ) ist eigentlich nicht viel
class mySession
{
var $SessionCookieName = "sid";
var $SecureCookieName = "secureCookie";
var $SecureCookieValue;
var $sid;
var $sessionOK = false;
var $arrSessionData;
function mySession($nNewSession=0)
{
if($nNewSession)
{
if( $this->issetCookie($this->SessionCookieName ) )
{
session_id($this->getSessionID());
session_start();
session_destroy();
}
$this->createSession();
}else{
$this->sid = $this->getSessionID();
$this->startSession();
}
}
function createSession()
{
//echo "<pre> session-array===>";print_r($arrSession);
global $arrSession;
session_start();
$this->sid = session_id();
setcookie($this->SessionCookieName, $this->sid);
// mit session_register wollte ich eigentlich nichtmehr arbeiten da ich lieber die
// superglobals verwenden möchte also anstatt
//session_register
//$_SESSION =
//oder
// $_SESSION['arrSession'] =
session_register("arrSession");
$this->arrSessionData = &$arrSession;
}
function startSession()
{
global $arrSession;
session_id($this->sid);
session_start();
session_register("arrSession");
$this->arrSessionData = &$arrSession;
}
function destroySession()
{
session_destroy();
}
function getSessionID()
{
return $this->getCookie($this->SessionCookieName);
}
function issetCookie($strCookieName)
{
global $$strCookieName;
return isset($$strCookieName);
}
function getCookie($strCookieName)
{
global $$strCookieName;
return $$strCookieName;
}
function setSessionValue($strArrayItem, $Value)
{
$this->arrSessionData[$strArrayItem] = $Value;
}
function getSessionValue($strArrayItem)
{
return $this->arrSessionData[$strArrayItem];
}
function getSessionInnerValue($strArrayItem,$Value)
{
return $this->arrSessionData[$strArrayItem][$Value];
}
}
?>
hier der Aufruf aus dem programm raus
$ses = &new mySession(1);
$ses->getSessionValue("curCostumerID"); // holt mir einen Wert aus
// $_SESSION['arrSession']['curCostumerID'];
Mit
$ses->SetSessionValue("curCostumerID",123); // Setzte ich mir den Wert
// $_SESSION['arrSession']['curCostumerID'];
oder ein komplettes array mit
$ses->setSessionValue("curCustBank", $arrCostumer);
Ich finde das auch ok so .
Nur checke ich nicht wie ich die dlobals aus der Klasse rausbekomme und dies umbauen muss
Kann mir da jemand helfen
Gruss und danke
Achim
Hello Achim,
es sieht nicht so aus, als würde es sich lohnen, darin Zeit zu verschwenden.
Es ist wnig sinnvoll, wüf die meisten Operationen nur 'Wrapper', also Hüllfunktionen zu schreiben, wenn sie denn keine wesentlichen eigenen Aufgaben mehr wahrnehmen, sondern nur die Ursprüngliche Funktion mit einem anderen Namen (anderer Referenz) versehen.
Sinnvoller wäre es bestimmt, Du würdest die Schritte nach und nach selber nachvollziehen und verstehen.
Man kann auf den meisten Hosting-Servern auch das Register-Globals gezielt für einzelne Verzeichnisse wieder einschalten, sodass Du Dein Altmetarial noch benutzen könntest und nach und nach in einem anderen Verzeichnis eigene Entwicklungen auf dem Stand der Technik als Ersatz erzeugst.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
es sieht nicht so aus, als würde es sich lohnen, darin Zeit zu verschwenden.
Das Problem ist, das mein ganzes Programm die setSessionValue und gets verwendet
Sinnvoller wäre es bestimmt, Du würdest die Schritte nach und nach selber nachvollziehen und verstehen.
Da hast Du vollkommen recht nur möchte ich die News-Group hier nicht zu arg nerven da ich von OOP nicht viel Ahnunhg habe
Würde es gerne aber in der Klasse komen Dinge vor die ich absolut nicht verstehe (Brett vorm Kopf)
Man kann auf den meisten Hosting-Servern auch das Register-Globals ...
Das wäre nicht das problem da es mein eigener server ist (ist ein sehr günstiger Provider)
Hier mal was , wa sich absolut nicht verstehe
function createSession()
{
global $arrSession;
Warum hier ein Global
$arrSession ist nur ein Variablenname für meine session-array
$this->sid = session_id();
setcookie($this->SessionCookieName, $this->sid);
session_register("arrSession");
$this->arrSessionData = &$arrSession;
Das ist erstb der Hit, was soll mir &$arrSession sagen?
Wie kann ich sowas in einer Klasse nachbilden?
Ich glaube es ist sowas ähnliches wie füge
arrSessionDat das array $arrSession hinzu oder?
}
und im folgenden kacke ich total ab
function issetCookie($strCookieName)
{
global $$strCookieName;
return isset($$strCookieName);
}
Warum $$strCookieName und Global noch dazu?
Wenn ich es doch schon am Anfang als Varibale definiert habe
und was soll das doppelte $$
Ich hörte mal davon das man damit einer variablen mehrere Werte zuweisen kann aber warum solltes/muss es hier zum einsatz kommen was bezweckt es?
Gruss und danke
Achim
hi,
Würde es gerne aber in der Klasse komen Dinge vor die ich absolut nicht verstehe (Brett vorm Kopf)
dann fehlt dir offenbar noch ein wenig grundlagenwissen, ich geb dir mal ein paar stichworte, um dich zu informieren.
function createSession()
{
global $arrSession;Warum hier ein Global
$arrSession ist nur ein Variablenname für meine session-array
damit diese funktion auf eine variable $arrSession zugreifen kann, die ausserhalb ihres gültigkeitsbereiches definiert wurde, und ihr nicht als parameter übergeben wurde - solche variablen kann man sich über das schlüsselwort global in seine funktion "hereinholen".
$this->arrSessionData = &$arrSession;
Das ist erstb der Hit, was soll mir &$arrSession sagen?
stichwort: referenzen
function issetCookie($strCookieName)
{
global $$strCookieName;
return isset($$strCookieName);
}Warum $$strCookieName und Global noch dazu?
$$ siehe stichwort variable variablen, und global - na ja, s.o.
gruß,
wahsaga
Hallo,
.
function createSession()
{
global $arrSession;Warum hier ein Global
$arrSession ist nur ein Variablenname für meine session-array.... solche variablen kann man sich über das schlüsselwort global in seine funktion "hereinholen".
Genau deswegen frage ich mich was das soll, da arrsession nicht auserhalb definiert wurde bzw. dort mit einem wert belegt wurde
Oder ich sehe den wald vor lauter Bäumen nicht
$this->arrSessionData = &$arrSession;
Das ist erstb der Hit, was soll mir &$arrSession sagen?
stichwort: referenzen
Muss ich mich doch mal genauer ansehen
Gruss Achim