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

OP #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.
OP #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.
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.