donald2603: Sessions personalisieren

Moin,

bin schon wild im Internet am suchen, weiß aber leider nicht wonach genau..

Ich würde Sessions gerne personalisieren. Also auf die Webseite und die Person anpassen.

Zur Zeit ist es so, dass ich eine kleine Software habe, die auf mehreren Domains, aber auf dem gleichen Server läuft.

Das Problem ist, das wenn ich mich bei einer Webseite einlogge und dort die Session-Variable login = true gespeichert wird, das ich dann bei allen anderen Seite auch eingeloggt bin.

Ich könnte nun natürlich immer den Domainnamen mit speichern und abfragen, dann würde es aber Probleme geben, wenn ich bei zwei Seiten gleichzeitig angemeldet sein möchte.

Gibts da nicht die Möglichkeit pro Domain eine Session zu bekommen?

Donald

  1. Das Problem ist, das wenn ich mich bei einer Webseite einlogge und dort die Session-Variable login = true gespeichert wird, das ich dann bei allen anderen Seite auch eingeloggt bin.

    Klingt erstmal wenig unglaubwürdig - Cookies sidn üblicherweise die primäre Methode um Sessions zu übertragen und die sind nicht Domainübergreifend nutzbar - ein Single Sign-on-System funktioniert nicht "einfach so".

    Gibts da nicht die Möglichkeit pro Domain eine Session zu bekommen?

    Ich gehe davon aus, dass du Sub-Domains meinst und nicht gänzlich unterschiedliche Domains:

    http://php.net/manual/en/function.session-set-cookie-params.php

    1. Klingt erstmal wenig unglaubwürdig -

      also viel glaubwürdig? - scnr

      Gruß
      Kalk

    2. Tach!

      Cookies sidn üblicherweise die primäre Methode um Sessions zu übertragen und die sind nicht Domainübergreifend nutzbar - ein Single Sign-on-System funktioniert nicht "einfach so".

      Domain hier im Sinne des vollständigen Hostnamens.

      Gibts da nicht die Möglichkeit pro Domain eine Session zu bekommen?
      Ich gehe davon aus, dass du Sub-Domains meinst und nicht gänzlich unterschiedliche Domains:
      http://php.net/manual/en/function.session-set-cookie-params.php

      Man muss explizit den domain-Parameter konfigurieren, wenn man die Sesssion-Cookies für alle Subdomains unterhalb eines bestimmten Levels haben möchte.

      dedlfix.

  2. Tach!

    Ich würde Sessions gerne personalisieren. Also auf die Webseite und die Person anpassen.

    Eine Session ist doch schon "personalisiert" - oder besser an eine bestimmte Browserinstanz gebunden - üblicherweise jedenfalls.

    Zur Zeit ist es so, dass ich eine kleine Software habe, die auf mehreren Domains, aber auf dem gleichen Server läuft.

    Ich gehe mal davon aus, dass du den ganz normalen Session-Mechanismus PHPs mit Cookies verwendest. Der Session-Cookie ist auf den Hostnamen eingeschränkt, wenn du nichts anderes angegeben hast. Dadurch kommen sich Session-Cookies eigentlich gar nicht ins Gehege und deine Frage wäre damit gegenstandslos.

    Das Problem ist, das wenn ich mich bei einer Webseite einlogge und dort die Session-Variable login = true gespeichert wird, das ich dann bei allen anderen Seite auch eingeloggt bin.

    Nun scheinst du aber doch ein Problem damit zu haben. Ist es ein echtes oder nur ein vermutetes? Wenn echt, dann versuch es bitte so zu beschreiben, dass man es konkret (in einer Testumgebung) nachstellen kann.

    dedlfix.

  3. Moin,

    Zur Zeit ist es so, dass ich eine kleine Software habe, die auf mehreren Domains, aber auf dem gleichen Server läuft.

    ok, das geht. Feine Sache, multi-domain-fähige Software, hab ich auch ;)

    Das Problem ist, das wenn ich mich bei einer Webseite einlogge und dort die Session-Variable login = true gespeichert wird, das ich dann bei allen anderen Seite auch eingeloggt bin.

    Eine Abfrage 'login == true' ist in diesem Fall nicht hinreichend.

    Ich könnte nun natürlich immer den Domainnamen mit speichern und abfragen, dann würde es aber Probleme geben, wenn ich bei zwei Seiten gleichzeitig angemeldet sein möchte.

    Die Trennung muss an einer anderen Stelle erfolgen. Du hast _eine_ SW für mehrere Domains. In dieser SW kannst Du den Domain-Namen aus einer Umgebungs-Variablen lesen und anhand des Domain-Namen den Speicherort für die Session bestimmen (Domänen abhängige Konfiguration).

    Hotti

    1. Tach!

      Das Problem ist, das wenn ich mich bei einer Webseite einlogge und dort die Session-Variable login = true gespeichert wird, das ich dann bei allen anderen Seite auch eingeloggt bin.
      Eine Abfrage 'login == true' ist in diesem Fall nicht hinreichend.

      Ein (nicht typsicherer) Vergleich eines booleschen Wertes auf wahr dürfte auch in Perl sinnlos sein. Man kann den Wert direkt in der Bedingung verwenden.

      Ich könnte nun natürlich immer den Domainnamen mit speichern und abfragen, dann würde es aber Probleme geben, wenn ich bei zwei Seiten gleichzeitig angemeldet sein möchte.
      Die Trennung muss an einer anderen Stelle erfolgen. Du hast _eine_ SW für mehrere Domains. In dieser SW kannst Du den Domain-Namen aus einer Umgebungs-Variablen lesen und anhand des Domain-Namen den Speicherort für die Session bestimmen (Domänen abhängige Konfiguration).

      Das Problem des OP bezieht sich auf PHP und nicht Perl. Manche Sachen sind zwar übergreifend lösbar, aber deine unzureichenden PHP-Kenntnisse stiften mal wieder mehr Verwirrung als Nutzen.

      Der Speicherort der Session ist nebensächlich. Man kann durchaus den Default-Mechanismus von PHP verwenden. Bei ausschließlicher Verwendung von Cookies für die Session-ID sind diese bereits ausreichend, um eine Trennung der Sessions nach Hostnamen zu gewährleisten. Ohne Rückmeldung seitens des OP wird sich nicht klären lassen, wie seine derzeitige Konstellation aussieht und wie er sich dadurch die bereits vorhandene Trennung ausgehebelt hat.

      Wenn er die Session-ID selbst auf anderem Wege mitführt, dann kann er im Prinzip gleich im Code dafür sorgen, dass bei einem Wechsel zu einer anderen Domain die Übergabe unterbleibt. Andererseits kann man die Werte im Session-Array auch gleich nach Domains trennen.

      $_SESSION['domain1'] = array();
      $_SESSION['domain2'] = array();

      $_SESSION['domain1']['login'] = true;
      $_SESSION['domain1']['wert1'] = foo;
      $_SESSION['domain1']['wert2'] = bar;

      $_SESSION['domain2']['wert1'] = qux;
      $_SESSION['domain2']['wert2'] = baz;

      dedlfix.