Forum: PC-Programmierung PHP Session Variable ändern.


von Rene K. (xdraconix)


Lesenswert?

Ich habe da gerade einen Knoten im Kopf.

Ich habe eine Seite (index.html) in denen per PHP eine Session gestartet 
wird. Über jquery lade ich eine php Seite jede Sekunde nach. In dieser 
wird die Session Variable zurück gelesen und genutzt. Das funktioniert 
alles tadellos.

Nun möchte ich aber via Button den Wert dieser Variable ändern.

Wie stelle ich das am dümmsten an? Kann ich per JS auf eine in PHP 
gesetzte Session Variable zugreifen?

von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Rene K. schrieb:
> Nun möchte ich aber via Button den Wert dieser Variable ändern.
https://www.w3schools.com/jsref/event_onclick.asp

von Bernd H. (geeky)


Lesenswert?

Rene K. schrieb:
> Kann ich per JS auf eine in PHP
> gesetzte Session Variable zugreifen?

Nein, von JS aus / client-seitig kann man üblicherweise nicht auf den 
Inhalt einer PHP-Session zugreifen.
Man könnte aber via JS einen Ajax-Request auf ein PHP-Script abfeuern, 
das dann wiederrum den Inhalt der PHP-Session wie gewünscht anpasst.
Alternativ: Das worum es geht gar nicht über die PHP-Session laufen 
lassen, sondern z.B. über ein eigenes Cookie.

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Bernd H. schrieb:
> Man könnte aber via JS einen Ajax-Request auf ein PHP-Script abfeuern,
> das dann wiederrum den Inhalt der PHP-Session wie gewünscht anpasst.

Super, danke dir. Das war der richtige Stichpunkt!

Via JS feuer ich einen ajax request auf ein separates PHP Script. Dieses 
setzt dann, entweder eine gewünschte Variable, oder aber toggelt eine 
Variable. (Im Bild "Hide / Show" um relevante Daten auszublenden z.b.)

JS:
1
$("button").click(function(event) {
2
  $.ajax({
3
    url : 'data/sessionbackend.php',
4
    type : 'post',
5
    data : {
6
      "var": "hideval",  //Oder andere Variable
7
      "val": "1",        //Wert, bei hideval aber irrelevant
8
    }
9
  })

PHP:
1
if(isset($_POST['var']) && isset($_POST['val'])){
2
    session_start();
3
    if($_POST['var'] == "hideval")
4
    {
5
        $_SESSION['hideval'] = !$_SESSION['hideval'];
6
    } else {
7
        $_SESSION[$_POST['var']]=$_POST['val'];
8
    }
9
} else {
10
11
}

Funktioniert tadellos!

von Roland P. (pram)


Lesenswert?

Rene K. schrieb:
> Funktioniert tadellos!

Du musst aufpassen, weil sich hier möglicherweise eine Sicherheitslücke 
anbahnt
1
$_SESSION[$_POST['var']]=$_POST['val'];

erlaubt es einen Angreifer jede beliebige Session-Variable zu 
manipulieren. Je nach Backend kann das keine, bis verheerende 
Auswirkungen haben.

LG Roland

von Rene K. (xdraconix)


Lesenswert?

Roland P. schrieb:
> erlaubt es einen Angreifer jede beliebige Session-Variable zu
> manipulieren. Je nach Backend kann das keine, bis verheerende
> Auswirkungen haben.

Ja stimmt, nicht nur das... er kann ja sogar selbst Session Variablen 
setzen... Okay, das muss ich mir tatsächlich nochmal überdenken. :-D

Dankeschön!

von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Rene K. schrieb:
> Funktioniert tadellos!
Aber irgendwie sinnfrei. Da kannste dir die Session auch gleich sparen.

von Rene K. (xdraconix)


Lesenswert?

Frank D. schrieb:
> Aber irgendwie sinnfrei. Da kannste dir die Session auch gleich sparen.

Jain, für das oben gezeigten Szenario stimmt das.

Da kommt aber noch einiges dazu. Das ist / war nur der erste Test um es 
möglichst einfach zu halten. Deswegen wollte ich halt einen Wrapper 
schreiben der Session Variablen mit var/val ändern kann.

Ich brauche halt eine Möglichkeit Global Variablen zu speichern auch 
über ein Close hinweg. Klar, kann man auch über eine DB machen, aber 
soviel Overhead finde ich dann doch zu doof.

von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Rene K. schrieb:
> Ich brauche halt eine Möglichkeit Global Variablen zu speichern auch
> über ein Close hinweg. Klar, kann man auch über eine DB machen, aber
> soviel Overhead finde ich dann doch zu doof.
Ich meinte eher sicherheitstechnisch, wenns eine interne/private 
Anwendung wird ist es egal.

Sessionsvars sind nicht für persistente Speicherung gedacht, auch wenn 
man das damit machen kann, früher oder später macht das immer wieder 
Ärger, vor allem wenn die Leute nicht wissen wie Sessions unter PHP und 
allgemein umgesetzt sind.

Wenn du keine DB willst, dann serialisiere dein Daten in eine Datei, das 
sind nur wenige Zeilen, da verschwindet dann auch nix irgenwann 
"überraschend" wie bei sessionvars und muss nicht umständlich beim 
einlesen parsen, das ist ein Einzeiler mit Serialisierung.

Je nach Anwendung kannst du auch im Browser dauerhaft Daten ablegen 
musst dann halt mehr mit JS rumhantieren ist aber manchmal einfacher als 
die Daten ständig hin und herzuschieben nur um sie aktuell zu halten wo 
sie evt. gar nicht gebraucht werden.

von Roland P. (pram)


Lesenswert?

Frank D. schrieb:
> Ich meinte eher sicherheitstechnisch, wenns eine interne/private
> Anwendung wird ist es egal.


Das stimmt nicht ganz. Man kann in eine öffentliche Webseite Code 
einbauen, der dann einen POST auf 
http://192.168.1.123/data/sessionbackend.php abschickt.
Stichwort: CORS/CSRF

Es ist aber hier viel Insiderwissen erforderlich und ich denke, dass 
deine Anwendung keib lohnendes Ziel wäre. Somit würde ich auch sagen, es 
ist fast egal.

Früher wurden aber über diese Technik oft Router angegriffen, bis die 
Hersteller dazugelernt haben.
Es reichte oft schon ein <img 
src='http://192.168.1.1/action?disconnect=true'; > in einer Website um 
Schabernack zu treiben

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.