session_id löschen wenn Browser geschlossen wird

Psynosis

Mitglied
Hi Leute.

Ich habe nun mein login script soweit fertig! nun ist nur noch das letzte offen!

wie kann ich das anstellen das wenn ein eingeloggter User einfach den Browser schliesst
das die session_id aus meiner sql db gelöscht wird
 
Schau dir mal das Skriptchen an:
PHP:
<?php
session_start();
// Prüfen, ob ein Autologin des Users stattfinden muss
if(isset($_COOKIE['Autologin']) AND !isset($_SESSION['UserID'])){
$sql = "SELECT
ID
FROM
User
WHERE
Autologin = '".mysql_real_escape_string($_COOKIE['Autologin'])."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(mysql_num_rows($result) == 1)
doLogin($row['ID'], '1');
}

// Online Status der User aktualisieren
if(isset($_SESSION['UserID'])){
$sql = "UPDATE
User
SET
Letzte_Aktion = '".time()."'
WHERE
ID = '".$_SESSION['UserID']."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}

// User ohne Autologin ausloggen
$sql = "UPDATE
User
SET
SessionID = NULL,
Autologin = NULL,
IP = NULL
WHERE
'".(time()-(60*30))."' > Letzte_Aktion AND
Autologin IS NULL
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

// Kontrollieren, ob ein automatisch ausgeloggter User noch eine gültige Session besitzt
if(isset($_SESSION['UserID'])){
$sql = "SELECT
SessionID
FROM
User
WHERE
ID = '".$_SESSION['UserID']."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(!$row['SessionID']){
$_SESSION = array();
session_destroy();
}
}
?>
 
Habe es mir angeschaut. und auch mal etws ausprobiert aber es klappt leider nicht bei mir! kannst du mir das bitte etwas genauer erleutern?
 
Also die Kommentare klären ja schonmal was wann wo gemacht wird...
Der Skript gehört an den anfang jeder Seite...
Am besten einfach includen...

Dann musst du nur noch sicherstellen, dass die Bezeichner... Also die Variablen mit denen, die du im Skript verwendest übereinstimmen...

Also die Bezeichnungen der $_SESSION, sowie die Spalten in der Tabelle müssen stimmen...

Das Skript handelt das auto-login, auto-logout und auch das Session-TimeOut...
 
könntest du mir eventuell noch die db daten bekantgeben? was ich alles brauche?

ich habe zB.

Code:
CREATE TABLE IF NOT EXISTS `users` (
  `UserID` int(11) NOT NULL auto_increment,
  `UserSession` varchar(32) default NULL,
  `fname` varchar(255) NOT NULL default '',
  `lname` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `pwd` varchar(32) NOT NULL default '',
  `addr` varchar(255) NOT NULL default '',
  `city` varchar(255) NOT NULL default '',
  `country` varchar(255) NOT NULL default '',
  `zipcode` varchar(255) NOT NULL default '',
  `phone` varchar(255) NOT NULL default '',
  `visits` int(8) NOT NULL,
  `datesignup` datetime NOT NULL,
  `lastchange` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`UserID`),
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
 
Was mir auf die Schnelle aufgefallen ist: Wo werden $_COOKIE['Autologin'] und $_SESSION['UserID'] gesetzt?
 
PHP:
<?php
session_start();

// Online Status der User aktualisieren
if(isset($_SESSION['UserID'])){
$sql = "UPDATE
users
SET
Letzte_Aktion = '".time()."'
WHERE
UserID = '".$_SESSION['UserID']."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}

// User ohne Autologin ausloggen
$sql = "UPDATE
users
SET
UserSession = NULL,
IP = NULL
WHERE
'".(time()-(60*30))."' > Letzte_Aktion  //Hier wird festgelegt wie lange ein User ohne Aktion als online gilt, bevor die session zerstört wird!
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

// Kontrollieren, ob ein automatisch ausgeloggter User noch eine gültige Session besitzt
if(isset($_SESSION['UserID'])){
$sql = "SELECT
UserSession
FROM
users
WHERE
UserID = '".$_SESSION['UserID']."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(!$row['SessionID']){
$_SESSION = array();
session_destroy();
}
}
?>

So sind die Spalten weitestgehend umgeschrieben und den Teil mit dem auto-login, hab ich raus genommen... Wäre ne entsprechende CheckBox im Login-Feld... Kennste ja heir ausm Forum sicher...

In der DB fehlt dann noch:
Code:
IP VARCHAR(15) NOT NULL
Letzte_Aktion INT NOT NULL DEFAULT 0

Dann müsste es eigentlich so klappen...

Hatte den Skript so von mir übernommen Gumbo...
Wird bei mir alles in der doLogin() gehandelt ;)

Benutze das so seit ner Weile, es funktioniert also mit sicherheit ^^

[EDIT]

Ich glaube...
Letzte_Aktion == lastchange

Und setz nickname auch UNIQUE!
 
nun wenn ich einlogen will kommt immer ein fehler das ich nicht berechtigt bin! wie
sich die session_id gleich nach dem login ändern würde!
 
Zuletzt bearbeitet:
Danke fürs zusammen rücken des Posts... ^^

Könntest du bitte mal die Fehlermeldung posten...

Evtl beißt sich mein Snippet da mit deinen Skripts...

Ich versteh nich ganz was wo wie der Fehler sein soll...
 
Zurück