Session werden automatisch beendet

Moin Leute… also ich hab ein Problem ich bau mir hier was zusammen und arbeite dort mit sessions. Auf meine lokalenserver Apache und DB Mysql läuft alles super. Nur wenn ich das hier auf dem richtigen server hochlade beendet der irgendwie automatisch die sessions wenn ich die seite wechsle. kann mir jemand sagen woran das liegt?

Nein.
außer du verrätst uns relevante Teile deines Skripts.

also ich hab hier ein bereich für registrierte benutzer. wenn ich mich registriere dann startet er die session sobald ich eine andere seite aufrufe is die session nicht mehr gültig. session_start() ist am anfang immer gesetzt.

<?php require_once('fns.php'); session_start(); @$username = htmlentities(addslashes($_POST['username'])); @$password = htmlentities(addslashes($_POST['password'])); @$password2 = htmlentities(addslashes($_POST['password2'])); @$email = htmlentities(addslashes($_POST['email'])); @$fname = htmlentities(addslashes($_POST['fname'])); @$lname = htmlentities(addslashes($_POST['lname'])); @$address = htmlentities(addslashes($_POST['address'])); @$city = htmlentities(addslashes($_POST['city'])); @$zip = htmlentities(addslashes($_POST['zip'])); @$country = htmlentities(addslashes($_POST['country'])); if($username && $password && $password2 && $email && $fname && $lname && $address && $city && $zip && $country) { if($password != $password2) { $content = 'Die Passwörter stimmen nicht überein!'; } else { if((strlen($password) < 6) || (strlen($password) > 16)) { $content = 'Ihr Passwort muss zwischen 6 und 16 Zeichen groß sein.'; } else { $conn = db_connect(); $query = "SELECT * FROM customers WHERE username = '".$username."'"; $result = $conn->query($query); if($result->num_rows > 0) { $content = 'Dieser Benutzername ist bereits vergeben, bitte wählen Sie einen anderen.'; } else { if(register($username, $password, $email, $fname, $lname, $address, $city, $zip, $city)) { $_SESSION['valid_user'] = $username; $content = 'Sie wurden erfolgreich registriert.'; } } } } } else { $content = 'Sie müssen das Formular korrekt ausfüllen!'; } do_html_header('Startseite-Neu registrieren', 'Meta'); ?>

[quote=“cococango”]
@$username = htmlentities(addslashes($_POST[‘username’]));
@$password = htmlentities(addslashes($_POST[‘password’]));
@$password2 = htmlentities(addslashes($_POST[‘password2’]));
@$email = htmlentities(addslashes($_POST[‘email’]));
@$fname = htmlentities(addslashes($_POST[‘fname’]));
@$lname = htmlentities(addslashes($_POST[‘lname’]));
@$address = htmlentities(addslashes($_POST[‘address’]));
@$city = htmlentities(addslashes($_POST[‘city’]));
@$zip = htmlentities(addslashes($_POST[‘zip’]));
@$country = htmlentities(addslashes($POST[‘country’]));[/quote]
Ich weiß nicht ob ich lachen oder weinen soll ^
^"

[ol][li]Sind Magic Quotes auf bplaced aktiviert: phpinfo.bplaced.net/ das macht die Verwendung von addslashes redundant.[/li]
[li]ist addslashes nicht die richtige Funktion, um SQL Injections zu vermeiden, da die Funktion die verwendete Kodierung nicht berücksichtigt: shiflett.org/blog/2006/jan/addsl … ape-string
Besser wäre es: Überprüfen ob magic-quotes aktiviert sind, wenn ja: mit stripslashes die Quotes entfernen, und beim Einfügen ins SQL Query mit der richtigen Funktion (z.b. mysql_real_escape_string) escapen.[/li]
[li]htmlentities (besser eigentlich htmlspecialchars) solltest du erst verwenden, wenn die Daten ausgegeben werden. An der Stelle ist es unpassend. So landen die Daten nicht in ihrer reinsten Form in der Datenbank, und das nachträgliche Bearbeiten der Daten wird damit erschwert.[/li][/ol]

Zur Session:
Du musst sicher gehen, dass session_start() vor jeder Ausgabe aufgerufen wird, und auch bevor irgendwelche Session Variablen verwendet werden.
Nun weiß ich nicht was die Datei fns.php macht, aber es wäre vllt einen versuch wert session_start() vor das einbinden der fns.php zu packen. Oder falls session_start auch in der fns.php aufgerufen wird, ist es vollkommen überflüssig session_start in der aktuellen Datei erneut aufzurufen.

mfg Balmung

Behandle die Fehler anstatt sie zu unterdrücken…

alles klar leute danke für die tipps :smiley:
zu Balmung:
also sollte ich erst testen:

if(get_magic_quotes_gpc()) {
$username = stripslashes($_POST[‘username’]);
}

$username = $_POST[‘username’];

und dann die db abfrage:

$query = “SELECT *
FROM customers
WHERE username = mysql_real_escape_string(’”.$username."’)…
wre die abfrage so dann richtig?

[quote=“cococango”]if(get_magic_quotes_gpc()) {
$username = stripslashes($_POST[‘username’]);
}

$username = $_POST[‘username’];[/quote]
Naja, die zweite Zuweisung gehört eher in den else Block der If-Abfrage. Sonst bringt das ja nichts.

[quote=“cococango”]und dann die db abfrage:

$query = “SELECT *
FROM customers
WHERE username = mysql_real_escape_string(’”.$username."’)…
wre die abfrage so dann richtig?[/quote]
mysql_real_escape_string() ist eine PHP Funktion und keine (My)SQL Funktion.

Und wie hummer sagte, was ich vergessen habe:
Statt das @ zu nutzen solltest du lieber mögliche Fehler überprüfen. Falls es passieren kann, dass Formularfelder nicht vorhanden sind, nutze isset()

so leute habs jetzt nochmal probiert also aufm mysql server läufts auf bplaced nicht.

<?php session_start();
$test = $_POST['test'];

?>

Angemeldet <?php if($test) { $_SESSION['user'] = $test; } ?>
<h1>Startseite</h1>
<a href="index.php">hier gehts zur Startseite</a>
<a href="kontakt.php">kontakte</a>
<?php
  if(isset($_SESSION['user'])) {
      echo 'Sie sind angemeldet als:'.$_SESSION['user'];
  }
 ?>

Eig müsste auf der nächsten seite ja wenn ich mich anmelde das ist als $_SESSION angemdlet bin… macht er aber nicht er beendet sie automatisch.
wie krieg ich das hin das er das nicht macht oder sind das die server einstellungen?

hi,

[code]

<?php session_start();[/code] so geht das auch nicht... und wenn du error_reporting richtig benutzt wüsstest du auch den fehler :wink: lg flo

natürlich die session vor dem header ausgeben :smiley:
danke jetzt läuft alles :hail: