Forum: PC-Programmierung [JS/PHP] Wie globale Session Variable setzen und lesen


von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Ich habe hier ein kleines Problem.

Ich habe eine Hauptseite, welche eine Unterseite lädt. Diese hat die 
Document.ready() Funktion.

Overview.php
1
<div class="OverviewMain">
2
  <div class="OverviewLeft" id="R1">Right</div>
3
  <div class="OverviewBig1" id="B1">Big1</div>
4
  <div class="OverviewBig2" id="B2">Big2</div>
5
  <div class="OverviewSmall1" id="S1">Lade</div>
6
  <div class="OverviewSmall2" id="S2">Lade</div>
7
  <div class="OverviewLeft1"><img src="data/images/thermo1.svg" height="75" width="75"/><span id="T1">0.00°C</span></div>
8
  <div class="OverviewLeft2"><img src="data/images/thermo1.svg" height="75" width="75"/><span id="T2">0.00°C</span></div>
9
  <div class="OverviewLeft3"><img src="data/images/thermo1.svg" height="75" width="75"/><span id="T3">0.00°C</span></div>
10
</div>
11
12
<script language="javascript" type="text/javascript">
13
$(document).ready(function(){
14
    refreshSmall1();
15
    refreshJSON();
16
});
17
18
function refreshSmall1(){
19
    $('#S2').load('ajax_temp_chart.php?id=2');
20
    $('#T1').load('ajax_temp_val.php?id=1');
21
    $('#T2').load('ajax_temp_val.php?id=2');
22
    $('#S1').load('ajax_temp_chart.php?id=1', function(){setTimeout(refreshSmall1, 500);});
23
}
24
    
25
function refreshJSON(){
26
   $('#R1').load('ajax_JSON.php', function(){setTimeout(refreshJSON, 1000);});
27
}
28
</script>

Die dazugehörigen Dateien, welche mir kopfzerbrechen machen sind 
ajax_temp_val.php und ajax_JSON.php.


ajax_temp_val.php
1
<?php
2
   if(isset($_SESSION['temp1'])) {
3
        echo $_SESSION['temp1']."°C";
4
   } else {
5
        echo "nOK";
6
   }
7
?>


ajax_JSON.php
1
<?php
2
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
3
    socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
4
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>10, "usec"=>0));
5
    socket_bind($socket, '192.168.166.1', 20005);
6
7
    socket_recvfrom($socket, $buf, 1000, 0, $from, $port);
8
    $JSonVar = json_decode($buf);
9
    $_SESSION['temp1'] = $JSonVar->temp1;
10
    echo $_SESSION['temp1']."°C";
11
    //echo "OK";
12
    socket_close($socket);
13
?>

Das laden des JSON UDP Streams funktioniert tadellos und auch das setzen 
der Variable $_SESSION funktioniert, da mir über echo 
$_SESSION['temp1']."°C"; die richtigen Werte ausgegeben werden.

Jedoch müsste, da es sich um eine Seitenweite Session handelt, ( 
session_start() steht in der Index.php über welche sämtliche Seiten 
geladen werden) ja dann die Variable auch bei einem späteren Aufruf von 
ajax_temp_val.php verfügbar sein. Ist sie aber leider nicht.

ajax_temp_chart.php greift noch Datenbank gebunden auf die Daten zu, 
dies ist aktuell nicht von belangen.

Hat da jemand einen Tipp für mich?!

von Εrnst B. (ernst)


Lesenswert?

Rene K. schrieb:
> Jedoch müsste, da es sich um eine Seitenweite Session handelt, (
> session_start() steht in der Index.php über welche sämtliche Seiten
> geladen werden)

Bist du dir da sicher?
> $('#R1').load('ajax_JSON.php'...

macht direkt einen Request auf die ajax_JSON.php, nicht auf die 
index.php.

Wenn du da nicht einen Satz .htaccess Rules o.Ä. zum Umschreiben des 
Requests hast, läuft dieser Request (und auch die anderen 
ajax_temp_*.php) nicht über die index.php.

: Bearbeitet durch User
von Rene K. (xdraconix)


Lesenswert?

Ahh ich sehe, also wenn ich vor jedes Script welches auf die SESSION 
zugreifen will / muss ein session_start() schreibe dann funktioniert 
dies auch.

Mich verwundert dies schon ein wenig, denn mein logisches Verständnis 
sagt mir ja:
1
index.php session.start() -> overview.php
2
                                 |-> ajax_JSON.php
3
                                 |-> aja_temp_val.php

demnach wäre in meinem Verständnis die Session immernoch aktiv und 
könnte geschrieben und gelesen werden. Aber okay, wieder was gelernt. 
:-)

Vielen Dank dir.

von Εrnst B. (ernst)


Lesenswert?

Rene K. schrieb:
> demnach wäre in meinem Verständnis die Session immernoch aktiv und
> könnte geschrieben und gelesen werden.

Vereinfacht:

es gibt bei der php-session drei verschiedene Voraussetzungen für 
"aktiv":

1) Das PHP-SESSION-ID Cookie lebt noch im Browser
2) Die mit diesem Cookie verknüpften Daten existieren noch am Webserver
3) die gerade ausgeführte PHP-Seite hat das Cookie (1) benutzt, um die 
Daten (2) in die $_SESSION - Variable zu laden

session_start() kümmert sich um alle drei, und, vor allem, stößt (3) an.

: Bearbeitet durch User
von Purzel H. (hacky)


Lesenswert?

Globale php Variablen :

session_start();

$_SESSION['myvar']=123;
$_SESSION['anothervar']='abc';

von Rene K. (xdraconix)


Lesenswert?

Purzel H. schrieb:
> Globale php Variablen :
>
> session_start();
>
> $_SESSION['myvar']=123;
> $_SESSION['anothervar']='abc';

Das Problem lag ja nicht im setzen sondern im lesen:

$var = $_SESSION['myvar'];

in Verbindung der Abhängikeit von session_start() welche nicht nicht nur 
im Parent Dokument sondern auch im per jquery nachgeladenen Child 
beinhaltet sein muss.

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Funktioniert jetzt übrigens tadellos (siehe Bild), und schön auch das 
man eine Session Variable auch ein Objekt oder ein Multi-Array 
mitschicken kann.

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.