php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.10.2011, 12:48  
Neuer Benutzer
 
Registriert seit: 19.10.2011
Beiträge: 12
PHP-Kenntnisse:
Fortgeschritten
TKing befindet sich auf einem aufstrebenden Ast
Standard Probleme mit globalen Variablen

ich hatte erstmals vor Sessions in der DB zu speichern. Hab mich dabei auch eingelesen und wollte die Struktur über eine SessionHandler und der dazugehörigen SessionManagement.class.php regeln. Mein Problem ist jedoch, dass ich in der SessionHandler probleme mit dem objekt $SessionManagement habe. ich zeigs euch am besten mal mit meinem Versuch^^:

Das ist die SessionHandler:

PHP-Code:
    include 'SessionManagement.class.php';
    
$SessionManagement =  new SessionManagement($DBConnection);
    
// Lifetime auf eine Stunde setzen 
    
ini_set('session.gc_maxlifetime'3600); 
    
// gc mit einer Wahrscheinlichkeit von 1% aufrufen 
    
ini_set('session.gc_probability'1); 
    
ini_set('session.gc_divisor'100); 

    function 
ses_open($path$name) { 
        return 
true
    } 

    function 
ses_close() { 
        return 
true
    }
    
    function 
ses_read($ses_id) {
        global 
$SessionManagement;
        return 
$SessionManagement->SessionRead($ses_id);
    } 

    function 
ses_write($ses_id$data) { 

        global 
$SessionManagement;
        return 
$SessionManagement->SessionWrite($ses_id,1,$data); 
    } 

    function 
ses_destroy($ses_id) { 
//        $sql = "DELETE FROM 
//                        Sessions 
//                WHERE 
//                        ses_id = '".mysql_real_escape_string($ses_id)."' 
//               "; 
        
return true
    } 

    function 
ses_gc($life) { 
//        $ses_life = time()-$life; 
//
//        $sql = "DELETE FROM 
//                        Sessions 
//                WHERE 
//                        ses_time < ".$ses_life." 
//               "; 
        
return true;
    } 

    
session_set_save_handler ('ses_open'
                              
'ses_close'
                              
'ses_read'
                              
'ses_write'
                              
'ses_destroy'
                              
'ses_gc'); 
    
session_start(); 
Wie man sieht sind unten über session_set_save_handler alle Funktionen festgelegt, die dafür benötigt werden.

ses_read() funktioniert noch einwandfrei. Sobald ich aber ses_write() aufrufen will kommt folgender Fehler:

Zitat:
Fatal error: Call to a member function SessionWrite() on a non-object in C:\....\SessionHandler.class.php on line 26
Also genau hier:

PHP-Code:
    function ses_write($ses_id$data) { 

        global 
$SessionManagement;
        return 
$SessionManagement->SessionWrite($ses_id,1,$data); // Hier kommts zum Fehler, bzw. das Objekt ist nicht aufrufbar.
    

Wieso kann ich hier das Objekt $SessionManagement nicht mehr verwenden? get_class_methods($SessionManagement) liefert ebenfalls NULL zurück.

Kann diese nur einmal Global definiert werden?

Gruß

TKing
TKing ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.10.2011, 12:55  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

1) Verzichte auf die globale Variable

2) Du kannst nicht wissen, wann genau sess_write() aufgerufen wird. Das ganze findet (ohne explizites session_write_close()) im Zuge des Skriptshutdowns statt - das kann vor oder nach beseitigen Deiner Variablen sein.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 19.10.2011, 12:57  
Neuer Benutzer
 
Registriert seit: 19.10.2011
Beiträge: 12
PHP-Kenntnisse:
Fortgeschritten
TKing befindet sich auf einem aufstrebenden Ast
Standard

Und wie sollte ich das dann realisieren?
TKing ist offline   Mit Zitat antworten
Alt 19.10.2011, 13:07  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Im Manual steht zu session_set_save_handler() explizit drin, dass das ganze zwingend nach der Vernichtung aller Objekte passiert. Das ließe einen shutdown_function als eine Möglichkeit. Eine andere wäre das Explizite Schreiben im Destructor Deines Handlers.

Wobei ich doch gern mal die Frage aufwerfen würde, was das eigentlich soll. Wozu der DB-basierende Session-Handler? Es gibt nur extrem wenige Anwendungsfälle wo sowas Sinn macht - und auch da gibt es dann oft gute Alternativen.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 19.10.2011, 13:11  
Neuer Benutzer
 
Registriert seit: 19.10.2011
Beiträge: 12
PHP-Kenntnisse:
Fortgeschritten
TKing befindet sich auf einem aufstrebenden Ast
Standard

Diese Anwendung wir etwas mit Bezahlmodulen zu tun haben und sollte kein auslesen von Sessions ermöglichen, da diese zum LogIn geschrieben werden. Meine Idee war einfach, dass ich mit der Abspeicherung von Sessions in der DB eine erhöhte Sicherheit biete.
Vllt. sind meine Kenntnisse in dieser Sache etwas zu mager, aber für alternative Vorschläge, die sicher sind, würde ich dir auch sehr dankbar sein oder empfiehlst du eine einfache handhabung von Sessions, bei denen die session_id in cookies gespeichert wird?... also die "standard" Sessions...
TKing ist offline   Mit Zitat antworten
Alt 19.10.2011, 13:20  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Häh? Was hat das Speichern der Session-ID im Cookie mit dem Speicherort der Sessiondaten zu tun? Das sind doch zwei völlig verschiedene paar Schuhe.

Und was meinst Du mit
Zitat:
sollte kein auslesen von Sessions ermöglichen, da diese zum LogIn geschrieben werden.
?

Grundsätzlich: Wer auf Dein Dateisystem schauen kann, der hat auch Zugriff auf Deine Datenbank. Das Risiko einer Speicherung der Session-Daten in Dateien oder in Datenbanken ist damit erst mal das Selbe. Du kannst in beiden Fällen bis zu einem gewissen Grad gegensteuern und den reinen Lagerort Deiner Daten abspalten, ein anderer Ansatz ist das verschlüsselte Abspeichern der Session-Rohdaten - das macht z.B. Suhosin. Du kannst sogar die Session-Daten via memcache und Co im Speicher ablegen, das schützt Dich allerdings auch alles nicht vor Session-Highjacking.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 19.10.2011, 13:23  
Neuer Benutzer
 
Registriert seit: 19.10.2011
Beiträge: 12
PHP-Kenntnisse:
Fortgeschritten
TKing befindet sich auf einem aufstrebenden Ast
Standard

Okay, da bin ich wohl selbst ein wenig dumm an die Sache rangegangen ^^ Also ist es okay, wenn man die rechte des temp pfades, indem die session ids gespeichert werden beschränkt? Sprich nur als root ausführbar sind?

Edit.: Gibt es denn eine möglichkeit, dass die Session-Id nur in der DB gespeichert werden?
TKing ist offline   Mit Zitat antworten
Alt 19.10.2011, 13:30  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Zu 1) Nein. Der Nutzer, unter dem PHP läuft, braucht schon Zugriff auf die Daten. Und warum "ausführbar"?

Zu "Edit": Nein. Das Prinzip von Sessions ist, dass auf dem Client irgendein Identifikator für die Sitzung gehalten wird, und die Daten dann anhand des clientseitigen Identifikators zugeordnet werden.

Bitte erläutere mal, was das für Daten sind, die Du da absichern möchtest. Vielleicht gibt es ja die Möglichkeit, diese überhaupt nicht in der Session zu speichern?

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 19.10.2011, 15:10  
Neuer Benutzer
 
Registriert seit: 19.10.2011
Beiträge: 12
PHP-Kenntnisse:
Fortgeschritten
TKing befindet sich auf einem aufstrebenden Ast
Standard

Also... ich benötige einen Login Bereich (Benutzername + PW), welcher ebenfalls nach erfolg in einer Session hinterlegt wird und man sozusagen die Session nach einem erfolgreichem Login speichert, ohne dass dritte davon profitieren können.

Ich hoffe du verstehst mein vorhaben^^
TKing ist offline   Mit Zitat antworten
Alt 19.10.2011, 15:20  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Ein Passwort hat in der Session nichts verloren.

Ansonsten: Ein reiner Login ist eine Standardproblematik. Da gibt es tausende von Tutorials zu. Du kannst einen derartigen Login dann mittels diverser Sanity-Checks noch weiter verfeinern und bis zu einem gewissen Grad gegen Highjacking absichern. Prinzipiell macht das aber nur Sinn, wenn Du das ganze von vorn herein mit HTTPS kombinierst.

Serverseitig bietet es sich an, ein eigenes Session-Verzeichnis für genau dieses Projekt zu wählen und die Daten selbst mittels Suhosin zu verschlüsseln. Alternativ ist auch Memcache einen Blick wert, was den Lagerort angeht.

Wirf hier mal nen Blick drüber für die Basics.

Tja und was den Rest angeht: Hochsensible Daten gehören nicht gespeichert. Das sollte bei der ganzen Nummer Deine Hauptpremisse sein.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit Session Variablen Oliver24 PHP Einsteiger 11 08.07.2011 08:03
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
Problem mit globalen Variablen noBody PHP Tipps 2007 9 29.03.2007 12:35
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
probleme mit globalen variablen PHP Tipps 2005-2 2 18.07.2005 17:33
Sehr seltsame Probleme mit "POST" und "$_POST PHP Tipps 2005-2 5 05.07.2005 10:57
variablen zusammensetzen...syntax probleme PHP Tipps 2005-2 2 08.06.2005 15:10
Probleme beim Variablen übergeben... PHP Tipps 2005 6 31.05.2005 13:14
Probleme mit Formular und Variablen PHP Tipps 2005 6 04.04.2005 14:58
Probleme mit include oder Variablen PHP Tipps 2005 11 16.03.2005 22:30
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
Auswertung mit globalen Variablen duerov PHP Tipps 2004 4 07.09.2004 14:23
[Erledigt] Probleme mit isset() und globalen Arrays PHP Tipps 2004 5 24.08.2004 09:50
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
function ses_open php, probleme von globalen variablen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum