apache $_Session wird nicht gespeichert

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Chrigodth

Neues Mitglied
25 April 2019
5
0
1
33
[Offtopic]
Hi, ich bin noch etwas neu was Docker Container angeht.

[Umgebung]
3 Docker-Container von Docker-Hub mit Docker Desktop auf Windows 10 alles Linux Images von:
1. webdevops/php-apache-dev:7.3
(Apache php Server)

2. phpmyadmin/phpmyadmin:latest
(phpmyadmin)

3. mysql:latest
(mysql)

[Ist-Zustand]
Ich habe eine eigene Website(Apache php und MySQL + bootstrap(css+Java)) von xampp kopiert um sie testweise als Docker-Container laufen zu lassen. Die Docker-Container haben sich untereinander gefunden. Ich kann im Browser die Website aufrufen. Die Daten aus der SQL-Datenbank werden von dem apache-Server gefunden. Bootstrap und phpmyadmin funktionieren. Sobald ich mich einlogge und auf der Website interagiere wird der Login-Dialog wiederholt. Ganz offensichtlich werden meine Session-Variablen vergessen. Auf xampp funktioniert es wunderbar.

[Lösungsansätze]
Ich hab versucht die Einstellungen für das Session-Cookie selber zu setzen, was aber nicht wirkte:
Code:
 ini_set('session.gc_maxlifetime', 3600);
             ini_set('session.save_path', '/app/');
Gerade die Maxlifetime ist in phpmyadmin aber wohl gut eingestellt. Ich hatte da mal so eine Zahl gefunden, die hoch genug schien.

[Wunsch]
es wäre ja wunderbar wenn die SESSION-Variablen auf die nächsten Pages mitgenommen werden. Ich kann noch nicht genau sagen, ob es an Apache liegt oder phpmyadmin(wobei das glaube ich nur ein CLient für php ist?)

[Weitere Anlagen die nicht zum Hochladen erlaubt sind]
Ich frage mich bei der docker-compose, die einfach zur gröbsten Konfiguration dient, ob das Volume beim php-Apache-Container so stimmt.

YAML:
version: '3'

services:
    www:
      image:
        webdevops/php-apache-dev:7.3
      ports:
        - 8001:80
      volumes:
        - ./www/Aufg2_CD-Verwaltung/MVC_work:/app
      links:
        - db
      networks:
        - default

    phpmyadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - db:db
      ports:
        - 8000:80
      volumes:
        - c:/docker-test/conf/:/etc/phpmyadmin/
      environment:
        MYSQL_AUTH_TYPE:
          cookie
        SESSION_TIMEOUT:
          86400


    db:
      image: mysql:latest
      environment:
        MYSQL_DATABASE:
          musikalben_manager
        MYSQL_AUTH_TYPE:
          cookie
      ports:
        - 3306:3306
      volumes:
        - c:/docker-test/mysql/data:/var/lib/mysql
 
Zuletzt bearbeitet:

Jens_Q

Neues Mitglied
2 März 2020
3
0
1
46
Hi.
Ich habe leider exakt dasselbe Problem...
Hast Du eine Lösung gefunden?
Danke und viele Grüße,
Jens
 

Chrigodth

Neues Mitglied
25 April 2019
5
0
1
33
Schön das jetzt das Thema wieder angegangen wird. Ich hab das Projekt erstmal auf Eis gelegt. Aber nach Ostern könnte es sein, das ich mich da nochmal reinknie. Ich denke es ist die Konfiguration von Apache oder MySQL; die ich nicht gut kenne. Ich würde mich sehr über eine Lösung bis dahin freuen.
Grüße
Chris
 

Jens_Q

Neues Mitglied
2 März 2020
3
0
1
46
Hi.

Ich habe auch in dem Forum des "Herstellers" des Webserver-Container nachgefragt, und folgende Antwort bekommen:

"speaking about sessions, keep in mind that if you have your application in production, and you have more than one container running (as we usually work with container), if you use session on filesystem, you will have a different session for every container. You should use a shared disk, or better, an external database like redis"

Nur macht das aus meiner Sicht eigentlich keinen Sinn. Zwar laufen die mysql-Datenbank und der webserver in zwei verschiedenen Containern, aber ich verstehe nicht, wieso das Einfluss auf die Sessions haben soll, die der Webserver verwaltet...
?! :)

Ja, wäre schön, wenn dazu jemand etwas sagen könnte, der sich damit auskennt...

Ich werde vermutlich in den nächsten Tagen den Kontakt zu einem Profi bekommen - falls ich eine Lösung bekomme sage ich hier Bescheid...

Jens
 

Chrigodth

Neues Mitglied
25 April 2019
5
0
1
33
Meine SQL-Datenbank ist nicht in nem Container. Da möchte ich nochmal ausdrücklich drauf hinweisen. Denn dann würde es Redudante Daten ergeben. Das will ja keiner. Der MYSQL Dienst läuft im Container. Japp!

Ich bin gespannt Jens. Vergiss mich nicht :oops:
 

Jens_Q

Neues Mitglied
2 März 2020
3
0
1
46
Hi Chris,

entschuldige die späte Rückmeldung...
Der "Experte" hatte es auch nicht hinbekommen, und dann hatte ich es selbst wieder für eine Weile liegen gelassen...
Aber dann habe ich es mir noch mal angeschaut, und den Grund für die Probleme gefunden.

Letztlich war es lächerlich einfach - man muss nur drauf kommen... ^^
vor der Portierung zur NAS lief es auf SSL, und auf der NAS dann nicht mehr.
Daher war eine Einstellung im Code falsch:
Bei session-set-cookie-params (https://www.php.net/manual/de/function.session-set-cookie-params.php) war die Flag "secure" auf TRUE gesetzt. Dies muss aber bei non-SSL natürlich auf FALSE gesetzt werden.
(Hinzu kam bei mir dann noch ein ganz dummer Fehler, nämlich dass ich das über eine Variable gemacht hatte,
also so nach dem Motto
$secure = FALSE;
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
nur dass ich dabei fälschlicherweise das FALSE als String definiert hatte, also
$secure = "FALSE"; statt $secure = FALSE;
und das hat nicht funktioniert - aber ohne eine Fehlermeldung...


Ich hoffe, dass Dir das hilft...!

Gib mir ggf. mal eine Rückmeldung... :)

Viele Grüße,
Jens