ige Sessionfrage

Carrear

Erfahrenes Mitglied
Also ich habe mein Login ja mit Sessions programmiert und habe eben folgendes festgestellt...... Ich logge mich in einem Fenster ein und bleibe es da. Wenn ich jetzt ein zweites öffne und auf die Seite geh, bin ich in dem 2. Fenster nicht eingeloggt -_- ist das normal? Ne oder? Woran kann das liegen?

Eine weitere Feststellung von mir: Wenn ich einen Link aus dem Fenster in dem ich eingeloggt bin in einem neuen Fenster öffne bin ich dort auch eingelogt -.-

Ich habe jetzt auch schon vor session_start() session_name() gesetzt weil ich dachte, dass er vielleicht für jedes fenster eine neue andere session startet, und so hätte er ja immer auf die gleiche zugreifen müssen.... aber auch nicht.
 
Es scheint, als würde die Session nicht per Cookie aufrechterhalten.... das wäre zumindest die Erklärung dafür, dass im 1.Fall du nicht eingeloggt bist, beim Link aber schon(falls PHP mit session.use_trans_sid konfiguriert wird, wird automatisch die Session-ID per URL übertragen).
Schau bei dem Link einfach mal nach, ob da die Session-Id dran hängt.
 
Nein, in meinen Links wird nichts übergeben.

Habe soeben eine weitere entdeckung gemacht... moemantan habe ich das projekt 2 mal im netz... da wo ich es nur teste funktioniert es, aber da wo es funktionieren muss nicht... also muss es irgendwo im Code liegen.... dann schaue ich lieber erst nochmal nach bevor sich hier alle den kopf zerreißen ^^

Sehr interessant zu sehen:

In meiner Testversion fängt meine index.php so an:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?
include './include/connect.inc.php';
session_start(); 
?>
<head>

Wenn ich das auf meinem Server mache bekomme ich ne Fehlermeldung, wie kann das denn sein?

Ich glaube ich konnte den Fehler zumindest eingrenzen. also erfahrenere PHPler als ich wissen damit bestimmt was anzufangen:

Bis eben sah mein login formular so aus:

PHP:
<?
if(@$_SESSION['logged_in']  == "TRUE")
     {
 echo "Willkommen, ".$_SESSION['username']."!<br/><br/>\n";
 echo "<table>";
 echo " <tr>";
 echo "  <td>Du bist seid dem </td>";
 echo "  <td rowspan=\"2\"><img src=\"http://web.icq.com/whitepages/online?icq=".$_SESSION['icq']."&img=5\" /></td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td>".$_SESSION['regdat']." dabei!</td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td><br/></td>";
 echo " </tr>";
 echo " <tr>";
 echo "  <td>Dein letzter Besuch war am <b>".$_SESSION['last_visit']."</b>.</td>";
 echo " </tr>";
 echo "</table>\n";
 echo "<a href=./index.php?site=logout>Logout</a>";
 }
else
 {
 echo "<form action=\"./index.php?site=login\" method=\"post\">\n";
 echo " <fieldset>\n";
 echo "  <legend><b>Login</b></legend>\n";
 echo "  <table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n";
 echo "   <tr>\n";
 echo "    <td>Username</td>\n";
 echo "    <td><input type=\"text\" name=\"username\" size=\"9\" maxlength=\"20\" /></td>\n";
 echo "   </tr>\n";
 echo "   <tr>\n";
 echo "    <td>Passwort</td>\n";
 echo "    <td><input type=\"password\" name=\"passwort\" size=\"9\" /></td>\n";
 echo "   </tr>\n";
 echo "   <tr>\n";
 echo "    <td></td>\n";
 echo "    <td><input type=\"submit\" name=\"Send\" value=\"Login\" /></td>\n";
 echo "   </tr>\n";
 echo "  </table>\n";
 echo " </fieldset>\n";
 echo "</form>\n";
 }
?>

Ich hatte da ein @ drin weil $_SESSION['logged_in'] nur definiert war wenn man eingeloggt war. Sonst gabs da ne hässliche Fehlermeldung. Jetzt habe ich es so geändert ( nur die Erste Zeile):

PHP:
if($_SESSION['logged_in'] && $_SESSION['logged_in'] == "TRUE")

In dem Fenster wo ich eingeloggt bin kommt da kein Fehler..... in dem Fenster wo ich nicht eingeloggt bin kommt folgendes:

Notice: Undefined index: logged_in in /var/www/virtual/heerschaft.de/lks/htdocs/include/login_form.inc.php on line 2


Könnte es was damit zu tun haben
 
Da du die Fehlermeldung icht mit angegeben hast, gehe ich mal davon aus, dass sie in die Richtung "headers already send" geht.

Das liegt daran, dass du vor session_start() schon HTML-Code ausgibst. Das darf aber nicht sein. Vor session_start (und anderen Headerangaben) darf keinerlei Ausgabe (Nicht mal ein Leerzeichen oder Zeilenumbruch) erfolgen. Schreibe das session_start() einfach an den Anfang der datei.
 
Je nach Einstellung wird versucht, die Sitzungs-ID per Cookie zu übermitteln. Bei Aufruf der session_start()-Funktion wird also versucht, dieser Cookie zu setzen. Cookie-Informationen werden jedoch im Nachrichten-Header gesendet. Gab es vor dem Funktionsaufruf nun aber schon eine Ausgabe, können die Header-Informationen nicht mehr verändert werden, da sie bereits gesandt wurden.
Dass dies nur von Server zu Server trotzdem funktioniert, dass also Header-Informationen auch nach einer Ausgabe noch geändert werden können, hängt mit PHPs Ausgabepuffer zusammen, in dem die Ausgaben vor dem endgültigen Verschicken an den User Agent zwischengespeichert werden.
 
Carrear hat gesagt.:
Aber warum funktioniert es auf meinem funpic webspace?

Das dürfte am error_reporting liegen...bei funpic werden wohl Notices nicht angezeigt.
Dadurch gibt es keine Fehlermeldung->keine Ausgabe->header kann noch gesendet(cookie kann gesetzt werden)

Mittels
PHP:
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == "TRUE")
kannst du die Notice verhindern.
 
Okay, dann ist die fehlermeldung weg, aber das löst nicht mein eigentliches Problem, nämlich dass ich offensichtlich irgendwas mit der Session falsch mache. Dabei kann ich gar nit soviel verkehrt machen. Ich Starte nur ein einziges mal in allen dateien meine Session und zwar in der index.php ganz am anfang. In den anderen dateien kann ich sie nicht starten, weil ich alle dateien im body der index.php include.

Ich habe hier mal die Session einstellungen des Servers

session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php4 /var/lib/php4
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off
 
Also da ja offensichtlich die SESSION ID irgendwie nit richtig ankommt verschicke ich sie jetzt zusätzlich noch in jedem Link. Aber ich Frage mich, was pasier, wenn ich z.b. mal den Zurückknopf meines Browsers benutze? Da kann ich ja nichts übergeben.
 
Zurück