hotti: Tutorial zu PHP Sessions

Beitrag lesen

hi, danke der Nachfrage;

Das heißt für jeden Request, den ich auf den Server schicke (per AJAX, jqgrid) frage ich vorher ab, ob in der Tabelle Login-Status die session-id aktuell ist, für den user gültig und das Verfallsdatum < timestamp plus z.B. 30 minuten.

Aufgrund der Tatsache, dass die Session-ID (SID) weltweit eindeutig ist, darfst Du die SID als Primary Key in der Login-State-Table benennen. Zur Abfrage gehst Du einfach mit der SID da rein und bekommst z.B. user, group. Mehr brauchst Du eigentlich nicht, evntl. noch den timestamp (für den Zeitpunkt der Anmeldung).

Clean up bedeutet jetzt genau was? Lösche alle Datensätze aus der Login-Status-Tabelle, deren Verfallsdatum erreicht ist (wie?), bzw. lösche den Datensatz über die Funktion Logout.

Ganz genau! Cleanup ist auch ein Begriff aus der OOP, unmittelbar vor der Zerstörung eines Objekts wird die Destroy-Method aufgerufen, das gelegentlich wird auch als cleanup bezeichnet. Wenn Du mit OOP unterwegs bist, schreibe einfach ein Stück Code in die Destruktor-Methode, womit die Login-Tabelle von verfallenen Logins befreit wird ;)

Ich habe bislang noch keinen soliden Login programmiert und versuche anhand von php.net und tutorials dieses Thema erlernen.

Ich persönlich finde es sehr schade, dass Du das nicht mit Perl machst, ich bin mal so frech und poste ein Stück Code, was die Einfachheit zeigt:

  
sub login{  
	my $self = shift;  
	require Passfile; # Datei mit Passwort-Hashes  
	my $pass = Passfile->new($CFG->{passfile}) or do{  
		$self->errpush("Passfile not found");  
		return;  
	};  
	if($self->param('login')){  
		$self->ps(qw(user)); # ps() setzt Eingaben aus der Parameterliste in den STASH  
		my ($error, $username, $level) = $pass->usercheck($self->param('user'), $self->param('pass'));  
		if($error){  
			$self->{STASH}{mesg} = $error;  
			$self->invalid; # setzt class="err" (Schrift wird rot)  
			return;  
		}  
		else{  
			# schreibe LOGINTAB und redirekt  
			$self->{LOGINTAB}{$self->{SID}} = {  
					user => $username,  
					ts => time,  
					level => $level,  
			};  
			$self->{REDIRECT} = $self->{URL};  
		}  
	}  
	elsif($self->param('logout')){  
		delete $self->{LOGINTAB}{$self->{SID}};  
		$self->{REDIRECT} = $self->{URL};  
	}  
	else{$self->errpush('Unbekannter Parameter')}  
}  

Obwohl: Diese Überschaubarkeit ist nicht unbedingt Perl-spezifisch, die kannst Du vielleicht auch mit PHP hinbekommen ;)

Hotti