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?
Rene K. schrieb: > Nun möchte ich aber via Button den Wert dieser Variable ändern. https://www.w3schools.com/jsref/event_onclick.asp
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.
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!
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
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!
Rene K. schrieb: > Funktioniert tadellos! Aber irgendwie sinnfrei. Da kannste dir die Session auch gleich sparen.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
