login mit session_id läuft net!

@ oppa & Karl Förster

Vielen Dank, es funktioniert so wie ihr das beschrieben habt.

jetzt ist nur die frage wie übergebe ich die variable auf folgeseiten und wie log ich mich aus oder besser wie beende ich die session!?

und zum schluss, wie lange hälte denn so ne session und kann man die session z.b. auf 30 minuten begrenzen?!
 
Freut mich benksy !

Also die Session ID kann man per Cookie speichern lassen
und somit auch ein timeout festlegen, das folgendermaßen:

setcookie(session_name(), session_id(), time()+1800);
(das wären jetzt 30 Minuten bzw. 1800 Sekunden)

Ob das Speichern per Cookie von deinem Server unterstütz wird
erfährst du mit der Funktion phpinfo() und dann in der Zeile "session.use_cookies".

Andernfalls hängst du die Session-ID immer an die Url an:
$sid = session_id();
echo "<a href=\"link.php?PHPSESSID=$sid\">Session-ID an die link.php übergeben</a>";

Beim Schließen des Browsers wird die Session sowieso gelöscht, jedenfalls
wenn die Lifetime auf O in der php.ini gestzt ist, dort kann man dann eben
die Begrenzung setzen wie lange eine Session gültig ist, vorrausgesetzt man
hat die Berechtigung die php.ini des Servers zu verändern (Root Server).

Bis dann ...
 
Wow, ihr seit echt gut ;)))

hab die scripte ein bisschen umgebaut und alles läuft perfekt. **thxtooppa**

nur jetzt hab ich noch eine frage zu zerstörung der sessions.

ich möchte das wenn der user auf <logout> klickt die session mit der funktion
session_destroy() zerstört wird.

wie mache ich das ? muss ich erst ne neue session anlegen und die dann zerstören oder muss ich irgendwie die variable auslesen und dann zerstören

danke im vorraus..
 
ne

Ne benksy, einfach nur session_destroy() ... ähnlich wie session_start() halt bloß irgendwie das gegenteil
 
Zuletzt bearbeitet:
Login läuft! Wie weiter?

Hi,

Bei mir funktioniert das Login jetzt auch wunderbar!

Nun möchte ich, dass jeder verschiedene Benutzer bei
erfolgreichen Login auf seine zugewiesene Seite
gelenkt wird. Wie und wo im Script kann ich das nun
so machen?

Mein Login-System sieht so aus:

<<< index.php >>>

<?php
session_start();

include("connect2db.inc.php");
include("usermanagment.inc.php");

if (isset($_POST['action']) && $_POST['action']=='login')
{
$un = (isset($_POST['un'])) ? $_POST['un'] : '';
$pw = (isset($_POST['pw'])) ? $_POST['pw'] : '';
CheckUserLogin ($un, $pw, session_id());
}

if (isset($_GET['action']) && $_GET['action']=='logout')
{
UserLogout (session_id());
}
?>

html

- Login Formuar
- Logout usw
-----------------------------------------------


<<< usermanagment.inc.php >>>

<?php
/**** Prüfen, ob der User berechtigt ist, einen Login durchzuführen.*/
function CheckUserLogin ($un, $pw, $session){
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserPasswd FROM AdminUser WHERE UserName='$un' AND UserPasswd=MD5('$pw')") or mysql_error();
$zeile = mysql_fetch_array($result);
if ( $zeile["UserId"] == "" )
{
// header("Location: index.php");
}
else
{
$result = mysql_query("UPDATE AdminUser SET UserSession = '".$session."',UserLogin = NOW() WHERE UserId = '".$zeile["UserId"]."'") or mysql_error();
// header("Location: admin.php");
}
}
/**** LOGOUT */
function UserLogout ($session){
$result = mysql_query("UPDATE AdminUser SET UserSession = NULL WHERE UserSession = '".$session."'") or mysql_error();
// header("Location: index.php");
}
/**** Prüfen, ob die Session in Ordnung ist.*/
function CheckUserSession ($session){
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserLogin,UserPasswd FROM AdminUser WHERE UserSession = '".$session."'") or mysql_error();
if ( mysql_num_rows($result) == 1 ){
$zeile = mysql_fetch_array($result);
$sessarr[UserId] = $zeile["UserId"];
$sessarr[Name] = $zeile["Name"];
$sessarr[Vorname] = $zeile["Vorname"];
$sessarr[UserLogin] = $zeile["UserLogin"];
$sessarr[UserPasswd] = $zeile["UserPasswd"];
return $sessarr;
}
else {
// header("Location: index.php");
return false;
}
}
?>

Gruß piumer
 
Dazu legst Du ein weiteres Feld in der User-Tabelle an, das den URL zur benutzerspezifischen Seite beinhaltet. Gibt die Funktion "CheckUserLogin" nicht FALSE zurück, dann wird auf die spezifizierte Seite weitergeleitet.

snuu
 
so es nicht!

Habe jetzt in der Tabelle ein neues feld namens url angelegt und die url eingetragen.

Ich möchte nun, dass dort, wo bei Login Username usw steht, die url als link ausgegeben wird:

Habe die usermanagment.inc.php so bearbeitet:
Code:
<?php
/**** Prüfen, ob der User berechtigt ist, einen Login durchzuführen.*/
function CheckUserLogin ($un, $pw, $session){
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserPasswd,url FROM AdminUser WHERE UserName='$un' AND UserPasswd=MD5('$pw')") or mysql_error();
$zeile = mysql_fetch_array($result);
if ( $zeile["UserId"] == "" )
{
// header("Location: index.php");
}
else
{
$result = mysql_query("UPDATE AdminUser SET UserSession = '".$session."',UserLogin = NOW() WHERE UserId = '".$zeile["UserId"]."'") or mysql_error();
// header("Location: admin.php");
}
}
/**** LOGOUT */
function UserLogout ($session){
$result = mysql_query("UPDATE AdminUser SET UserSession = NULL WHERE UserSession = '".$session."'") or mysql_error();
// header("Location: index.php");
}
/**** Prüfen, ob die Session in Ordnung ist.*/
function CheckUserSession ($session){
$result = mysql_query("SELECT UserId,Name,Vorname,UserName,UserLogin,UserPasswd,url FROM AdminUser WHERE UserSession = '".$session."'") or mysql_error();
if ( mysql_num_rows($result) == 1 ){
$zeile = mysql_fetch_array($result);
$sessarr[UserId]    = $zeile["UserId"];
$sessarr[Name]      = $zeile["Name"];
$sessarr[Vorname]   = $zeile["Vorname"];
$sessarr[UserLogin] = $zeile["UserLogin"];
$sessarr[UserPasswd] = $zeile["UserPasswd"];
$sessarr[url] = $zeile["url"];
return $sessarr;
}
else {
// header("Location: index.php");
return false;
}
}
?>
----------------------------------------------
und in der index.php das hinzugefügt:

<?php
    $ses = CheckUserSession (session_id());
    if ($ses)
    {
      echo "Sie sind angemeldet: ";  
      echo "<br>";
      echo $ses [Vorname];
      echo " ";
      echo $ses [Name];
      echo "<br>";
         if ( $ses["UserName"] == "admin" ) // Hier soll die url ausgegeben werden
	{
	echo $ses [url];
	}
      }
  else.....     usw.

Doch es passiert nix

Gruß piumer
 
if ( $ses["UserName"] == "admin" )
In dem Array $ses gibt es auch keinen index mit dem Namen "UserName". in der Funktion "CheckUserSession" wird dieser Index nämlich nicht erstellt. Das hättest Du übrigens auch selbst herausfinden können, in dem Du Dir ein paar Debugmeldungen hättest ausgeben lassen.

Wenn nichts angezeigt wird, dann musst Du schauen, welche Bedingungen erfüllt sein müssen, damit die Anzeige erfolgen kann. Lass Dir die Werte ausgeben, die an der Bedingung teilhaben. Stimmen die Werte nicht, musst Du zurückverfolgen, wo die Werte gesetzt werden und ob dort der Fehler verborgen liegt.

Und nochetwas: Benutze bei Deinen zukünftigen Posts bitte die Highlightfunktion des Boards: [ PHP ] und [ /PHP ] (ohne Leerzeichen).

snuu
 
Brett vorm Kopp

Aja, alles klar. Hab nun eine Variable genommen, die es auch gibt und dann es auch. Danke für den Hinweis!

So, nun habe ich folgendes Problem:

Und zwar, wie schütze ich die Seiten, auf die nur die eingeloggten User dürfen.
Denn in der Url steht ja immer auf welcher Seite man grade ist z.B.
index.php?open=user_admin o.ä.

Gebe ich das direkt ein, zeigt mir der Browser die seite, ob ich eingeloggt bin oder nicht!

Könnt Ihr mir ein par Tips geben?

Vielen Dank, Gruß piumer
 
Zurück