[JS/PHP] Wie globale Session Variable setzen und lesen

#6984564
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?!
Angehängte Dateien:
#6984617
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.
#6984625
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.
#6984632
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.
#6985992
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren