Session will nicht mehr.....
S3Ri0US
- php
Hallo Gemeinde.. ich habe ein kleines problem... und zwar funktioniert auf meiner Seite der Login nicht mehr bzw. die Session Variable wird plötzlich nicht mehr gesetzt.. habe meinen Code etwas aufgeräumt und verschiedene sachen in extra PHP Dateien gepackt.. seit dem bin ich am verzweifeln. Ich habe an der Session / Login Function NICHT geändert. Evt. wisst ihr woran dies liegen könnte ?
Meine ersten 2 Zeilen der PHP Datei:
<?php
session_start();
Meine Login Funktion:
$abfrage = "SELECT id,pass FROM users WHERE name = '$u_name'";
$erg = mysql_db_query("mysql",$abfrage,$verbindung);
list($u_id,$pw) = mysql_fetch_row($erg);
$u_pw = md5($u_pw);
if($pw == $u_pw) {
$SessionNr = mt_rand(10000,99999);
$abfrage = "UPDATE users SET session_id='$SessionNr' WHERE id = '$u_id'";
$erg = mysql_db_query("mysql",$abfrage,$verbindung);
if($erg) {
---> $_SESSION['mySessionNr'] = $SessionNr;
$time = time();
mysql_query("UPDATE users SET expire = '".(time()+19000)."' WHERE session_id='$SessionNr'");
echo "<div class="style2-2"><b>Login erfolgreich !</b><br><br></div>";
echo "<a class='newlink2' href='index.php'>[ Weiter... ]</a>";
} else {
echo "<div class="style2-2"><b>Es ist ein Interner Fehler aufgetreten !</b></div>";
}
} else {
echo "<div class="style2-2"><b>Benutzer oder Passwort Falsch !</b><br></div>";
}
Die Variable $mySessionNr wird nicht gestezt.. wobei $SessionNr über RND erstellt wird.
Hi S3Ri0US!
Die Variable $mySessionNr wird nicht gestezt..
Ja und? Die Variable $binBierHolen
ist auch nicht gesetzt...
MfG H☼psel
Wow... welch intelligente Antwort... einfach Hammer ! Stunden lang im Duden geblättert wa.
nach dem: $_SESSION['mySessionNr'] = $SessionNr;
Sollte ich doch eine Variable $mySessionNr haben ?!
Hi S3Ri0US!
Die Variable $mySessionNr wird nicht gestezt..
Ja und? Die Variable$binBierHolen
ist auch nicht gesetzt...MfG H☼psel
Hallo,
nach dem: $_SESSION['mySessionNr'] = $SessionNr;
Sollte ich doch eine Variable $mySessionNr haben ?!
Warum? $_SESSION hat jetzt unter dem Schlüssel 'mySessionNr' den Wert von $SessionNr, sonst aber auch nichts.
Hopsels Antwort versteh` ich irgendwie nicht...
Btw: Was passiert eigentlich, wenn der Mersenne-Twister für zwei angemeldete Benutzer die gleiche Session-Nummer ausspuckt?
Gruß
Hallo Josh
Ich habe gerade getestet.. und siehe da.. im FireFox geht das alles wunderbar.. aber im IE7 tut sich Nix.. lässt mich einfach nicht einlogen bzw. die mySessionNr ist nicht gesetzt...
<?PHP
if(isset($_SESSION['mySessionNr'])) {
include'members_td.php';
}
?>
im FireFox wird mir die members tabelle angezigt nach dem Login.. im IE passiert NIX... habe es jetzt auch schon auf 3 Rechnern getestet.
ps.. da ich nur 15 Teammembers habe... sollte die der Zufall hier keine doppelten ausspucken.
Hallo,
Ich habe gerade getestet.. und siehe da.. im FireFox geht das alles wunderbar.. aber im IE7 tut sich Nix.. lässt mich einfach nicht einlogen bzw. die mySessionNr ist nicht
Vielleicht liegt es an den etwas seltsamen Sicherheitseinstellungen des IE (Stichwort Cookies)? Oder benutzt du Session-IDs über URL?
ps.. da ich nur 15 Teammembers habe... sollte die der Zufall hier keine doppelten ausspucken.
Sollte != Ist so ;-)
Gruß
Ich habe gerade getestet.. und siehe da.. im FireFox geht das alles wunderbar.. aber im IE7 tut sich Nix.. lässt mich einfach nicht einlogen bzw. die mySessionNr ist nicht
Vielleicht liegt es an den etwas seltsamen Sicherheitseinstellungen des IE (Stichwort Cookies)? Oder benutzt du Session-IDs über URL?
Hmmm...
Schmunzle immer mal wieder, was für Vorteile mir meine url und formular verwalteten Session Angaben für Vorteile bringen.
-- Keine Cookie/Browser Geschichten
-- Unbegrenzt viele Sessions pro User (sehr praktisch)
-- relativ klares Konzept von One-Time IDs.
ps.. da ich nur 15 Teammembers habe... sollte die der Zufall hier keine doppelten ausspucken.
Sollte != Ist so ;-)
Wenn S3RI0US die Session ID Abfrage immer auch mit dem Usernamen koppelt, hat er da weniger Probleme. Aber ich vermute mal, dass er das nicht macht.
Von daher wäre es angebracht, einen wirklich guten md5 Hash aus dem Timestring und einer Zufallszahl zu erzeugen.
Dass Session Diebstahl auch dann noch relativ trivial ist, ist klar.
mfg Beat
Ich Danke für die Antworten... helfen mir aber bei meinem Problem kaum weiter ;-)
Hi S3Ri0US!
Ich Danke für die Antworten... helfen mir aber bei meinem Problem kaum weiter ;-)
Weil du uns immer noch vorenthältst, wie du darauf kommst, dass $_SESSION['mySessionNr'] nicht gesetzt ist.
Entweder, du postest relevanten Quellcode oder wir können dir nicht helfen.
MfG H☼psel
Ok dann noch mal evt. reden wir aneinander vorbei also.. mein Login:
if($pw == $u_pw) {
$SessionNr = mt_rand(1000000,9999999);
$abfrage = "UPDATE users SET session_id='$SessionNr' WHERE id = '$u_id'";
$erg = mysql_db_query("german_pre",$abfrage,$verbindung);
if($erg) {
$_SESSION[ 'mySessionNr' ] = $SessionNr;
----> Session wird gesetzt
// TEST
if(isset($_SESSION['mySessionNr'])) {;
echo $_SESSION['mySessionNr'];
-----> Hier gibt es die Session noch !
}
$time = time();
mysql_query("UPDATE users SET expire = '".(time()+19000)."' WHERE session_id='$SessionNr'");
echo "<div class="style2-2"><b>Login erfolgreich !</b><br><br></div>";
echo "<a class='newlink2' href='index.php'>[ Weiter... ]</a>";
-----> Login Erfolgreich !! Jetzt klick ich auf den LINK also index.php so.... und nach dem index.php geaden wurde existiert die Session Nicht mehr !
Meine ersten Zeilen der index.php:
<?php
session_start();
if(isset($_SESSION['mySessionNr'])) {
echo "SESSION EXISTIER NIOCH";
} else {
echo "SESSION VERLOREN";
}
So.. und hier kommt immer Session Verloren... also wird sie beim Seitenwechsel nicht weitergegeben.
Hi S3Ri0US!
Du hast in deinem ersten Posting geschrieben, dass du nur am Code etwas geändert hast.
Der Code, den du gepostet hast, funkioniert aber soweit ich es beurteilen kann. Der Fehler muss also woanders liegen.
Du könntest ein Minimalbeispiel konstruieren, bei dem der Fehler noch auftritt.
Versuche auch, folgenden Code in eine Datei zu packen und diese aufzurufen.
<?php
session_start();
if(empty($_SESSION['mySessionNr'])) {
echo "SESSION NICHT VORHANDEN";
$SessionNr = mt_rand(1000000,9999999);
$_SESSION[ 'mySessionNr' ] = $SessionNr;
} else {
echo "SESSION EXISTIERT";
unset($_SESSION['mySessionNr']);
}
?>
Was passiert nach Neuladen der Seite?
MfG H☼psel
Bekomme ich immer: SESSION NICHT VORHANDEN
Allerdings weden alle Login Relevanten Sachen engezigt.. wie z.b. Members Tabelle usw..
Ach ja.. wenn ich in den LINK zur index.php die SID übergebe, geht es einwandfrei... allerdings möchte ich auf keinenfall die SID bei allen Links in der URL übergeben.
Hi S3Ri0US!
Ach ja.. wenn ich in den LINK zur index.php die SID übergebe, geht es einwandfrei... allerdings möchte ich auf keinenfall die SID bei allen Links in der URL übergeben.
Dann solltest du Cookies erlauben...
Nutzer, die keine Cookies erlauben, können sich dann auf deiner Seite aber auch nicht anmelden.
Du solltest dich mit der Übermittlung der Session-ID beschäftigen.
MfG H☼psel
ja das dachte ich mir auch... aber es gibt so viele Seiten im Netz welche Session verwenden... und da geht es ja bei mir auch... ich verwende die IE standart einstellungen wie 90% aller Nutzer... und diese sollten sich schon einlogen können... SID übergabe geht wie ich schon sagte über URL oder Cookie.. Über URL ist es total unsicher weil so jeder den Link einen Freund schicken kann und schon ist er eingelogt. Also was für möglichkeiten gibt es denn noch ? Wie gesagt.. bin ja sicherlich nicht der einzige im Netz welcher Session verwendet, und bei denen geht es auch.
Hi S3Ri0US!
ja das dachte ich mir auch... aber es gibt so viele Seiten im Netz welche Session verwenden... und da geht es ja bei mir auch...
Wird die Session-ID dort in der URL übertragen?
Wird das Cookie gesetzt?
Bei welchem Internetexplorer tritt das Problem auf?
Bei mir funktioniert die Testseite auch im IE 6 und im IE 7. Und dort sind garantiert die Standardeinstellungen getätigt, da ich diese Browser nur zum Testen verwende.
Ich vermute so langsam, dass es ein Einstellungsproblem deinerseits ist...
MfG H☼psel
Hi S3Ri0US!
Wow... welch intelligente Antwort... einfach Hammer ! Stunden lang im Duden geblättert wa.
Du bist ploet! Ich war wirklich danach Bier holen.
Da versucht man, dir auf eine lustige Art und Weise den Fehler vor die Stirn zu hämmern und du hast nur Hohn und Spott übrig.
nach dem: $_SESSION['mySessionNr'] = $SessionNr;
Sollte ich doch eine Variable $mySessionNr haben ?!
Ja! Blubb!
Eben nicht!
Blubb!
Eigentlich habe ich im Moment echt keinen Bock mehr dir zu helfen. Was soll´s...
Ich würde folgendermaßen herangehen.
session_start();
// Datenbankverbindung aufbauen und Datenbank auswählen
// mysql_db_query ist veraltet!
// ...
// Eindeutige Session-ID generieren
srand((double)microtime()*1000000);
$sid = md5(rand(0,9999999));
// Setzen der Session-ID und -dauer,
// wenn Loginname und -passwort richtig sind
$abfrage = " UPDATE users
SET session_id='".$sid."',
expire = '".(time()+19000)."'
WHERE (LOWER(name) = '".mysql_real_escape_string(strtolower($_POST['login_name'],ENCODING))."')
AND (pass = '".md5($_POST['login_password']).")";
// Session eintragen
if(mysql_query($abfrage)) {
if(mysql_affected_rows() > 0) // Session wurde eingetragen
$_SESSION['mySessionNr'] = $sid;
else // UPDATE schlug fehl
echo '<div class="style2-2"><b>Benutzer oder Passwort falsch!</b><br></div>';
} else echo '<div class="style2-2"><b>Es ist ein Interner Fehler aufgetreten!</b></div>';
Fehler könnten noch drin sein, aber das Prinzip sollte deutlich werden.
Den Code kannst du aber (vermutlich) ohne größere Probleme einbauen.
Und das nächste mal überlegst du gefälligst, was dieser vermeintlich sinnlose Beitrag bedeuten könnte.
Den Fehler kann man nämlich anhand deiner "Fehlerbeschreibung" nicht erkennen und dir folglich auch nicht helfen.
MfG H☼psel
Hi Ingrid!
" WHERE (LOWER(name) = '".mysql_real_escape_string(strtolower($_POST['login_name'],ENCODING))."')"
" WHERE (LOWER(name) = '".mysql_real_escape_string(strtolower($_POST['login_name']))."')"
MfG H☼psel