php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.10.2008, 15:51   #1 (permalink)
Benutzer
 
Registriert seit: 04.05.2005
Beiträge: 41
boehseronkel
boehseronkel eine Nachricht über ICQ schicken
Standard Objekte und Sessions

Hallo zusammen,

ich hab nen Problem mit der Serialisierung von Objekten in eine Session. Aber nun erstmal grundlegendes zum Verständnis.

Ich habe eine Startseite (index.php) diese instantiiert meinen Dispatcher (Dispatcher.class.php). Im Dispatcher werden die Requests (POST/GET) zusammengeführt und gleichermaßen behandelt. Wenn jetzt z.B. die Variable "page" den Wert "login" enthält (egal ob POST/GET) dann wird ein SecurityManager instantiiert (SecurityManager.class.php) der eine Methode (login($username, $password)) beinhaltet. Der SecurityManager beinhaltet zusätzlich Benutzername, BenutzerID, Rechte usw. daher muss ich den SecurityManager via Sessions immer im Zugriff haben.

Jetzt kommt genau das Problem.

Nach der Instantiierung wird der SecurityManager in ne Session geschoben.

Code:
$_SESSION['securityManager'] = new SecurityManager();
Ab diesem Zeitpunkt arbeite ich nur noch mit der Session. Also auch der Login, welcher das Objekt wieder manipuliert (Benutzername usw.)

Der erste Zugriff auf das Objekt via Session klappt problemlos. Das heißt wenn ich nach Instantiierung direkt auf das Objek zugreife bekomme ich ne Ausgabe. Lade ich z.B. die Seite neu, bekomme ich keine Ausgabe - Hier ist das Problem.

Ich bekomme einfach keine Ausgabe nachdem irgendwas passiert (Request o.Ä.) ist.

Selbstverständlich habe ich im Dispatcher und auch in der index File jeweils den include des SecurityManagers vor dem session_start() gemacht.

Hoffe ich könnt mir helfen - es ist echt wichtig ...

Danke im Vorraus.

Gruß Sven
boehseronkel ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.10.2008, 17:28   #2 (permalink)
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.679
PHP-Kenntnisse:
Fortgeschritten
agrajag befindet sich auf einem aufstrebenden Ast
Standard

Von was für einer Ausgabe redest du? Wird garnichts mehr ausgegeben (Fatal Error) oder erwartest du eine bestimmte Ausgabe die nicht kommt? Wenn ja welche und wie sieht der entsprechende Code aus?

Hast du irgendwelche nicht serialisierbaren Dinge in der Klasse (DB-Verbindungen, Handler, ...) um die du dich nicht kümmerst?
__________________
GAGA, GOGO, TRALAFITTI!
agrajag ist offline  
Alt 04.10.2008, 17:47   #3 (permalink)
Benutzer
 
Registriert seit: 04.05.2005
Beiträge: 41
boehseronkel
boehseronkel eine Nachricht über ICQ schicken
Standard

Hallo,

erstmal Danke für die Antwort.

Zitat:
Zitat von agrajag Beitrag anzeigen
Von was für einer Ausgabe redest du? Wird garnichts mehr ausgegeben (Fatal Error) oder erwartest du eine bestimmte Ausgabe die nicht kommt? Wenn ja welche und wie sieht der entsprechende Code aus?
Ich habe mal den Sourcecode der relevanten Teile dabei gepackt.

Code:
<?php

<?php
// index.php

@include ("SecurityManager.class.php");
@include ("Dispatcher.class.php");
@session_start();

if(isset($_SESSION['securityManager']))
{
	print_r($_SESSION['securityManager']);
}

$request = array();
$request = @array_merge($_POST, $_GET);

$dispatcher = null;
$dispatcher = new Dispatcher();
$dispatcher->init();
$dispatcher->setRequest($request);
$dispatcher->handleRequest();

echo $dispatcher->getResponse();

?>

<?php

// Dispatcher.class.php

@include ("SecurityManager.class.php");
@session_start();

class Dispatcher
{

	private $request = null;
	private $response = null;

	public function init()
	{
		if(!isset($_SESSION['securityManager']))
		{
			$_SESSION['securityManager'] = new SecurityManager();
		}
	}
	
	public function handleRequest()
	{
		$this->response = $_SESSION['securityManager']->getUsername();
	}
	
	public function setRequest($request)
	{
		$this->request = $request;
	}
	
	public function getResponse()
	{
		return $this->response;
	}
}

?>

<?php

// SecurityManager.class.php

class SecurityManager
{
	
	private $username = null;	
	
	public function login($username, $password)
	{
		$isLoggedIn = false;
		
		$this->username = $username;
				
		return $isLoggedIn;
	}
	
	public function getUsername()
	{
		return $this->username;
	}	
}
?>

?>
Nach dem ersten Aufruf ist alles i.O. er gibt mir den übergebenen Username aus. Wenn ich dann allerdings die Seite neu lade existiert die Ausgabe des Benutzernames nicht mehr und auch die Sessionausgabe des SecurityManagers ändert sich nicht.

Zitat:
Zitat von agrajag Beitrag anzeigen
Hast du irgendwelche nicht serialisierbaren Dinge in der Klasse (DB-Verbindungen, Handler, ...) um die du dich nicht kümmerst?
Nein, so wie es oben gezeigt ist wird es aktzuell verwendet.

Gruß Sven
boehseronkel ist offline  
Alt 04.10.2008, 18:53   #4 (permalink)
Erfahrener Benutzer
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.359
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Versuch mal anstatt:
PHP-Code:
print_r($_SESSION['securityManager']); 
das hier:
PHP-Code:
var_dump($_SESSION['securityManager']); 
Ob dein Securitymanager überhaupt ein passendes Objekt ist oder nur ein "datenobjekt"
robo47 ist offline  
Alt 04.10.2008, 20:40   #5 (permalink)
Benutzer
 
Registriert seit: 04.05.2005
Beiträge: 41
boehseronkel
boehseronkel eine Nachricht über ICQ schicken
Standard

Hallo,

als Ausgabe bekomme ich folgendes.

Code:
array(1) { ["securityManager"]=>  object(SecurityManager)#1 (1) { ["username:private"]=>  string(7) "default"} }
Damit wäre es doch ein eindeutiges Objekt und kein Datenobjekt oder?

Gruß Sven
boehseronkel ist offline  
Alt 04.10.2008, 20:55   #6 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 21.316
PHP-Kenntnisse:
Fortgeschritten
nikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblicknikosch ist ein wunderbarer Anblick
Standard

Mag zwar nicht die Lösung sein, aber warum doppelst Du die Aufrufe von session_start () und bindest aus Dispatcher.class.php erneut securityManager ein? Das gibt doch Streß. Und (oder gerade deshalb?) warum blockst Du alle Fehler mit @?
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist gerade online  
Alt 06.10.2008, 10:20   #7 (permalink)
Erfahrener Benutzer
 
Benutzerbild von cortex
 
Registriert seit: 19.08.2008
Beiträge: 129
cortex befindet sich auf einem aufstrebenden Ast
Standard kein gutes konzept

SecurityManager... wow - klingt super.

Zitat:
Zitat von boehseronkel Beitrag anzeigen
Im Dispatcher werden die Requests (POST/GET) zusammengeführt und gleichermaßen behandelt.
das solltest du dringendst überdenken. $_GET und $_POST sind nunmal nicht dasselbe. wer die beiden zusammenschmeisst - das trifft auf die verwendung des unseeligen $_REQUEST ebenso zu - handelt sich potenzielle gefahren für die sicherheit der anwendung ein. bspw. das hier:

Suspekt… � Blog Archive � PHP 5.3 and Delayed Cross Site Request Forgeries/Hijacking

darüber hinaus deutet es auf einen unsauberen / schlampigen programmierstil hin.

weiter im text: was versprichst du dir von der exzessiven verwendung des @-operators? wäre gar nicht verkehrt, sich für die php-fehlermeldungen zu interessieren. wenn du meinst, dass der code ohne die dinger nicht auskommt, musst du ihn umstricken. wenn du behauptest, dass es anders nicht machbar ist:

PHP Einsteiger - php.de

cx
cortex ist offline  
Alt 06.10.2008, 11:57   #8 (permalink)
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.679
PHP-Kenntnisse:
Fortgeschritten
agrajag befindet sich auf einem aufstrebenden Ast
Standard

Hi Cortex,
kannst du mal bitte näher erklären, warum ein Zusammenlegen von GET und POST ein Sicherheitsrisiko ist? In dem Artikel, den du verlinkst wird das auch nicht behauptet oder belegt - lediglich wenn auch noch $_COOKIE (wie bei $_REQUEST) hinzukommt gibt es eine potentielle Gefahr.
Prüfen ob es ein GET oder POST Request ist kann er auch mit $request->isPost() oder ähnlichem. Und CSRF ist so oder so möglich wenn man nichts weiteres dagegen unternimmt.
Überseh ich was?
__________________
GAGA, GOGO, TRALAFITTI!
agrajag ist offline  
Alt 06.10.2008, 15:55   #9 (permalink)
Benutzer
 
Registriert seit: 04.05.2005
Beiträge: 41
boehseronkel
boehseronkel eine Nachricht über ICQ schicken
Standard

Hallo zusammen,

danke für die Hinweise - es lag wirklich an den Fehlerausgaben diese haben mich darauf hingewiesen das ein include fehlgeschlagen ist.

Cortex - danke für Deine, in meinen Augen sehr "angreifende" Kritik - ich werde mir den Artikel durchlesen und ggf. mein Konzept überdenken aber nur ein Tip - vllt. solltest Du etwas Deine Schreibart überdenken - diese kommt sehr "arrogant" rüber.

Sofar - Problem gelöst - danke an alle.

Gruß Sven
boehseronkel ist offline  
Alt 06.10.2008, 16:32   #10 (permalink)
Erfahrener Benutzer
 
Benutzerbild von cortex
 
Registriert seit: 19.08.2008
Beiträge: 129
cortex befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von agrajag Beitrag anzeigen
kannst du mal bitte näher erklären, warum ein Zusammenlegen von GET und POST ein Sicherheitsrisiko ist?
es ist ein potentielles risiko - es muss keins sein. es geht in erster linie um schlampige entwicklung und den kontrollverlust, was über "irgendeinen" kanal in eine anwendung gelangt. der author des verlinkten artikels hat sich schon mehrfach zu dem thema geäussert aber ok... dabei gings überwiegend um das "böse" $_REQUEST. ein zusammenschmeissen von$_GET und $_POST fällt allerdings in dieselbe rubrik.

Zitat:
Zitat von boehseronkel Beitrag anzeigen
nur ein Tip - vllt. solltest Du etwas Deine Schreibart überdenken - diese kommt sehr "arrogant" rüber.
danke dafür... wenn ich den mund aufmache komme ich direkt zur sache das ist meine art - mit einem vergleichbaren echo kann ich umgehen. mir gefallen ebenfalls viele dinge nicht; ändern kann ich's trotzdem nicht.

dass du bspw. fehlermeldungen ausblendest und dich über nicht funktionierende skripte wunderst, qualifiziert dich in meinen augen nicht gerade als entwickler mit erfahrung (bin übrigens selbst autodidakt) - ergo solltes du nicht im unterforum "PHP-Fortgeschrittene" posten, sondern dich zuallererst mit den basics der programmierung beschäftigen.

sorry, wenn das wieder zu arrogant war...
cx
cortex ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

 


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
Referenzen auf Objekte innerhalb eines Arrays PHP-Fortgeschrittene 6 31.08.2009 17:06
Login-System ohne Sessions ratsam? MauMau PHP Tipps 2008 4 02.09.2008 12:09
2 Sessions Kein Genie PHP Tipps 2006 8 21.07.2006 15:45
Objekte vergleichen PHP-Fortgeschrittene 4 08.12.2005 16:20
[Erledigt] probleme mit sessions PHP Tipps 2007 1 17.11.2005 10:43
[Erledigt] Nach Einfügugng der Sessions funktioniert mein Program nicht PHP-Fortgeschrittene 1 02.10.2005 06:13
Sessions! DER_Brain PHP Tipps 2005-2 5 30.06.2005 14:51
2 Sessions? PHP Tipps 2005 5 29.04.2005 19:04
objekte in sessions mit register globals of PHP Tipps 2005 1 12.03.2005 17:06
Proble mit Sessions PHP Tipps 2005 7 07.02.2005 17:42
Sessions PHP Tipps 2005 6 14.01.2005 15:02
variablen per sessions übergeben PHP Tipps 2005 5 13.01.2005 12:09
Sessions und ZoneAlarm PHP Tipps 2004 4 25.08.2004 17:35
[Erledigt] Usermanagement mit Sessions - Sicherheitsprobleme ? PHP Tipps 2004 0 30.06.2004 09:49
[Erledigt] Sessions, sessions und nochmal sessions PHP-Fortgeschrittene 0 06.06.2004 00:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php class session, php session class, php session klasse, session klasse php, php klassen session, php klasse session, session class php, php session login class, login session php class, php session nach post request, php post session register, klassen und session php, php objekte in include, php classes session, php global aus klasse auf session zugreifen, php sessions und klassen, $_session print_r object, php class in session, php klasse in session, session php class

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.




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