Session plötzlich weg (heißgeliebtes Thema)

Hi *,

so langsam gebe ich auf >:-( Hab lange gegoogelt und an einigen
Einstellungen herumexperimentiert, also ein Fall für die newsgroup.

Folgendes Problem mit der Sessionverwaltung (PHP Version 5.2.4):

Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
session_start(); ab.

Ich kann sehen, dass ein Cookie gesetzt wird, oder wenn ich dem Browser
sage, daß er keine Cookies akzeptieren soll, dann werden auch brav
alle Links auf der Folgeseite mit PHPSESSID ergänzt.

Sobald ich jetzt jedoch den nächsten Link auf meiner Seite betätige,
egal ob Cookie oder URL Variante, ist die Session plötzlich weg
(echo session:id() - ergibt leere Ausgabe, und mein session-Kontext ist
weg).

Ich bin ziemlich ratlos und ich hoffe Ihr habt noch eine Idee, was ich
ausprobieren könnte. Hier meine session Einstellungen aus der php.ini:

session.save_handler = files
session.save_path = "/tmp"
session.use_cookies = 1
session.use_only_cookies = 0
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 1200
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = 1
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = 0
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 1
session.hash_function = 1
session.hash_bits_per_character = 5

Grüße

Stefan
Stefan Schubert [ Mo, 03 Dezember 2007 17:08 ] [ ID #1884787 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:
> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
> session_start(); ab.

Bei Erfolg? Machst Du das evt. nur von diesem einen erfolgreichen
Abschicken des Formulars abhängig?

> Ich kann sehen, dass ein Cookie gesetzt wird, oder wenn ich dem Browser
> sage, daß er keine Cookies akzeptieren soll, dann werden auch brav
> alle Links auf der Folgeseite mit PHPSESSID ergänzt.
>
> Sobald ich jetzt jedoch den nächsten Link auf meiner Seite betätige,
> egal ob Cookie oder URL Variante, ist die Session plötzlich weg
> (echo session:id() - ergibt leere Ausgabe, und mein session-Kontext ist

Fipptehler? Du meintest session_id(), gell? Aber um auf oben
zurück zu kommen: Wird denn jetzt auch noch die Funktion
session_start() ausgeführt? Das wäre selbstverständlich die
Grundvoraussetzung für das weitere Funktionieren der Session.


Gruß
JPM
dev-null-use-reply-ad [ Mo, 03 Dezember 2007 17:19 ] [ ID #1884789 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:

> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
> session_start(); ab.

Wie meinst Du das?

> Sobald ich jetzt jedoch den nächsten Link auf meiner Seite betätige,
> egal ob Cookie oder URL Variante, ist die Session plötzlich weg
> (echo session:id() - ergibt leere Ausgabe, und mein session-Kontext ist
> weg).

Dir ist aber schon klar, dass _jedes_ Script, welches auf die
Session-Daten zugreifen will, session_start() "absetzen" muss (ich
bevorzuge die übliche Ausdrucksweise "aufrufen")? Also auch das Script,
welches Du über diesen Link aufrufst?

> Hier meine session Einstellungen aus der php.ini:

Viel interessanter wären die beteiligten Scripte. Ich vermute eher dort
den Fehler.

Gruß. Claus
Claus Reibenstein [ Mo, 03 Dezember 2007 17:20 ] [ ID #1884790 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:

> so langsam gebe ich auf >:-( Hab lange gegoogelt und an einigen
> Einstellungen herumexperimentiert, also ein Fall für die newsgroup.
>
> Folgendes Problem mit der Sessionverwaltung (PHP Version 5.2.4):
>
> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
> session_start(); ab.

Typisch ist das nicht, nein. Typischerweise wird das session_start() in
jedem Fall ausgeführt und bei erfolgreichem Login ein Flag gesetzt. Hier
ein schemenhaftes Beispiel:

<?php
class User {
public $name = 'Gast';
public $authenticated = false;

public static function getFromSessionContext() {
if(!isset($_SESSION['user'])) {
$_SESSION['user'] = new User();
}

return $_SESSION['user'];
}
}
?>

-- login.php --
<?php
// Session starten
session_start();

// User-Objekt holen
$user = User::getFromSessionContext();

if(isset($_POST['doLogin'])) {
// Check login
if( [at] $_POST['password'] == 'geheim') {
$user->name = [at] $_POST['username'];
$user->authenticated = true;

// Redirect ..
header('Location: http:// ... ' . SID);
exit(0);
}
}
?>

-- other-script.php --
<?php
session_start();

// User-Objekt holen
$user = User::getFromSessionContext();

// Checken ob user eingeloggt ist
if(!$user->authenticated) {
header('Location: http://example.org/login.php' . SID);
exit(1);
}
?>

> Ich kann sehen, dass ein Cookie gesetzt wird, oder wenn ich dem Browser
> sage, daß er keine Cookies akzeptieren soll, dann werden auch brav
> alle Links auf der Folgeseite mit PHPSESSID ergänzt.

> Sobald ich jetzt jedoch den nächsten Link auf meiner Seite betätige,
> egal ob Cookie oder URL Variante, ist die Session plötzlich weg
> (echo session:id() - ergibt leere Ausgabe, und mein session-Kontext ist
> weg).

Blöd gefragt: Du rufst aber schon session_start() in jedem Script auf,
in dem du mit $_SESSION hantieren willst, oder?

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ Mo, 03 Dezember 2007 17:30 ] [ ID #1884793 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Hallo *,

Claus Reibenstein wrote:

>> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
>> session_start(); ab.
>
> Wie meinst Du das?

siehe Antwort auf Thomas...

> Dir ist aber schon klar, dass _jedes_ Script, welches auf die
> Session-Daten zugreifen will, session_start() "absetzen" muss (ich
> bevorzuge die übliche Ausdrucksweise "aufrufen")? Also auch das Script,
> welches Du über diesen Link aufrufst?

Das war es!!! War mir überhaupt nicht klar! Ich hatte erwartet, daß der
Session-Händler automatisch erkennt, dass ich mich in einem Session-Kontext
bewege und die Session automatisch fortsetzt. Irgendwie muss ich diese Info
auf den ganzen man-pages überlesen haben *grübel*

VIELEN DANK :-)

Was mich allerdings wundert ist, ob die php core Entwickler das auch so
gedacht haben. Jetzt wird auf der Einstiegsseite das session_start()
aufgerufen, egal ob ich einen session-context benötige, oder nicht und php
gibt mir trotzdem eine Notice aus:

"Notice: A session had already been started - ignoring session_start()
in ..."

Hm, ist session_start() dann wirklich das angedachte Kommando, für mich
liest sich die Notice so als wäre ein anderer Weg gedacht, um eine
existierende Session fortzuführen. Egal es funktioniert jetzt.

Viele Grüße

Stefan
Stefan Schubert [ Mo, 03 Dezember 2007 17:55 ] [ ID #1884797 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Hallo Thomas,

Thomas Hamacher wrote:

>> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
>> session_start(); ab.
>
> Typisch ist das nicht, nein. Typischerweise wird das session_start() in
> jedem Fall ausgeführt und bei erfolgreichem Login ein Flag gesetzt. Hier
> ein schemenhaftes Beispiel:

Ah ich hatte das extra so gebaut, weil ich dachte das dies ressource-
sparender ist. Also eine Session nur dann aufgebaut wird, wenn ich sie auch
wirklich benötige.

Ich sehe aber an Deinem Code-Beispiel (vielen Dank dafür), das es im Grunde
auch sinnvoll ist mit einem Gast-User zu arbeiten. So kann man in der
Anwendung auch Daten für Gast-User zwischen den Seiten besser
transportieren.

Viele Grüße

Stefan
Stefan Schubert [ Mo, 03 Dezember 2007 18:00 ] [ ID #1884798 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:

> gibt mir trotzdem eine Notice aus:
>
> "Notice: A session had already been started - ignoring session_start()
> in ..."

Dann hast du session_start() *zweimal* in einem Skript aufgerufen.

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ Mo, 03 Dezember 2007 18:11 ] [ ID #1884801 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:
> Hallo Thomas,
>
> Thomas Hamacher wrote:
>
>>> Ich habe eine typische Useranmeldung und bei Erfolg setze ich ein
>>> session_start(); ab.
>> Typisch ist das nicht, nein. Typischerweise wird das session_start() i=
n
>> jedem Fall ausgef=C3=BChrt und bei erfolgreichem Login ein Flag gesetz=
t. Hier
>> ein schemenhaftes Beispiel:
>
> Ah ich hatte das extra so gebaut, weil ich dachte das dies ressource-
> sparender ist. Also eine Session nur dann aufgebaut wird, wenn ich sie =
auch
> wirklich ben=C3=B6tige.
>
> Ich sehe aber an Deinem Code-Beispiel (vielen Dank daf=C3=BCr), das es =
im Grunde
> auch sinnvoll ist mit einem Gast-User zu arbeiten. So kann man in der
> Anwendung auch Daten f=C3=BCr Gast-User zwischen den Seiten besser
> transportieren.

Die meisten Seiten werden so in der Form funktionieren oder moechtest du =

dich bei Amazon oder deinem $Lieblingsshop erst anmelden muessen um
shoppen zukoennen?

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Stra=C3=9Fe 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Mo, 03 Dezember 2007 18:59 ] [ ID #1884804 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Niels Braczek wrote:

>> "Notice: A session had already been started - ignoring session_start()
>> in ..."
>
> Dann hast du session_start() *zweimal* in einem Skript aufgerufen.

Hallo Niels,

wenn ich drüber nachdenke hast Du recht. Das ist jetzt noch die Altlast,
weil ich die Session erst bei Bedarf setzen wollte. Wenn ich das
session_start aus der login-seite entferne und nur noch in meinem
Hauptskript belasse, ist auch die Meldung weg ;-)

Danke für den Hinweis.

Grüße

Stefan
Stefan Schubert [ Di, 04 Dezember 2007 09:44 ] [ ID #1885606 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Hallo Joerg,

Joerg Behrens wrote:

> Die meisten Seiten werden so in der Form funktionieren oder moechtest du
> dich bei Amazon oder deinem $Lieblingsshop erst anmelden muessen um
> shoppen zukoennen?

Nein, für einen onlineshop, der professionell gehostet wird macht das Sinn.
Für einen startup-Auftritt (der kein shop ist) und auf einem kleinen
standalone Server gehostet wird, dachte ich daran ressourcen-sparrend zu
arbeiten ohne mir vorher angesehen zu haben, was das eigentlich für den
Server bedeutet.

Ich müsste mir mal den Ressourcen-Verbrauch bei 1000 gleichzeitigen Sessions
(träum) ansehen.

Viele Grüße

Stefan
Stefan Schubert [ Di, 04 Dezember 2007 09:49 ] [ ID #1885607 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert schrieb:
> Hallo Joerg,
>
> Joerg Behrens wrote:
>
>> Die meisten Seiten werden so in der Form funktionieren oder moechtest =
du
>> dich bei Amazon oder deinem $Lieblingsshop erst anmelden muessen um
>> shoppen zukoennen?
>
> Nein, f=C3=BCr einen onlineshop, der professionell gehostet wird macht =
das Sinn.
> F=C3=BCr einen startup-Auftritt (der kein shop ist) und auf einem klein=
en
> standalone Server gehostet wird, dachte ich daran ressourcen-sparrend z=
u
> arbeiten ohne mir vorher angesehen zu haben, was das eigentlich f=C3=BC=
r den
> Server bedeutet.

Bedenke das Problem wenn deine Benutzer mal deinen "Sessionbereich"
verlassen um eine andere Seite deiner Website aufzurufen. Du wuerdest
dann die Session unter Umstaenden verlieren.

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Stra=C3=9Fe 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Di, 04 Dezember 2007 10:33 ] [ ID #1885609 ]

Re: Session plötzlich weg (heißgeliebtes Thema)

Stefan Schubert wrote:

> Ich müsste mir mal den Ressourcen-Verbrauch bei 1000 gleichzeitigen Sessions
> (träum) ansehen.

Irrelevant bzw. nicht meßbar. Keine Ahnung was Du bei Sessions als
Problemstelle siehst.

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_) Mitglied der Freizeitvögel? ;-)
^^
Ulf Kadner [ Di, 04 Dezember 2007 11:18 ] [ ID #1885612 ]
PHP » de.comp.lang.php.misc » Session plötzlich weg (heißgeliebtes Thema)

Vorheriges Thema: Cookies
Nächstes Thema: str_replace wirkt nicht?