• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ajax odbieranie zmiennych sesyjnych

Object Storage Arubacloud
+1 głos
237 wizyt
pytanie zadane 5 sierpnia 2020 w JavaScript przez persikk Obywatel (1,140 p.)
zmienione kategorie 5 sierpnia 2020 przez Arkadiusz Waluk

Witam próbuję napisać swojego pierwszego Ajaxa w życiu i mi nie wychodzi, nie wiem co dalej.

document.querySelector('.test').addEventListener('click', test);



function test()
{

const xhr = new XMLHttpRequest();
xhr.onload=function ()
{

  if(this.status===200)
  {
    var x=$_SESSION['jeden'];
     console.log(x);  //tutaj nie mam pojęcia jak dostać się do zmiennych sesyjnych
                      // to nie działa 


    
  }
}
  xhr.open('GET','test.php',true);
  xhr.send();

}

Szkielet wydaje mi się że mam poprawny. Problem polega na tym że nie wiem jak odebrać teraz zmienne sesyjne żebym mógł coś dalej z nimi zrobić np pobrać liczbę i dodać do niej +100.

komentarz 5 sierpnia 2020 przez persikk Obywatel (1,140 p.)
Załóżmy że chcę pobrać zmienną

$_SESSION['jeden'] = 1

$_SESSION['dwa'] = 2

2 odpowiedzi

0 głosów
odpowiedź 6 sierpnia 2020 przez VBService Ekspert (253,400 p.)
wybrane 7 sierpnia 2020 przez persikk
 
Najlepsza

Moja propozycja, może naprowadzi Ciebie na rozwiązanie Twojego problemu. wink

index.php

<?php
session_start();
if (! isset($_COOKIE["PHPSESSID"])) {
    // Pierwsze uruchomienie ustawiam zmienne sesji
    $_SESSION['jeden'] = "session-jeden";
    $_SESSION['dwa'] = "session-dwa";
}
?>
<!DOCTYPE html>
<html lang="pl">
    <head>
        <meta charset="utf-8">

    </head>
    <body>
        <pre id="response_board"></pre>

    <script>
        function showOnResponseBoard(msg) {
            const r_board = document.getElementById("response_board");
            r_board.innerHTML = msg;
        }
        function onProgress(e) {
            const status = "Pobieram dane ... ";
            showOnResponseBoard(status);
        }
        function onError(e) {
            const status = "Błąd podczas pobierania danych\n" + e.target.status;
            showOnResponseBoard(status);
        }
        function onLoad(e) {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                try {
                    const oJSON = JSON.parse(xmlHttp.responseText);
                    let status = "";
                    for (let name in oJSON) {
                        status += oJSON[name] + "\n";
                    }
                    showOnResponseBoard(status);
                } catch(err) {
                    //showOnResponseBoard(err);
                    showOnResponseBoard(xmlHttp.responseText + "\n" + err);
                }
            }  else if (xmlHttp.readyState == 4 && xmlHttp.status == 404) {
                const status = "404 - Podany plik <b>"+url+"</b> nie został odnaleźiony na serwerze.";
                showOnResponseBoard(status);
            }
        }

        const xmlHttp = new XMLHttpRequest();
        xmlHttp.onprogress = onProgress;
        xmlHttp.onerror = onError;
        xmlHttp.onload = onLoad;

        const url = "test.php";
        const f_url = url + (url.match(/\?/) == null ? '?' : '&') + (new Date()).getTime();
        xmlHttp.open("GET", f_url, true);
        xmlHttp.overrideMimeType('text/plain');
        xmlHttp.send(null);
    </script>
    </body>
</html>

test.php

<?php
session_start();
if (isset($_COOKIE["PHPSESSID"])) {
    // $_SESSION['jeden'] = "session-jeden";
    // $_SESSION['dwa'] = "session-dwa";
    echo json_encode($_SESSION);
} else {
    echo "Problem z pobraniem zmiennych sesji.";
}
?>

XMLHttpRequest ]  [ Using XMLHttpRequest ]

0 głosów
odpowiedź 5 sierpnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie możesz w JS odczytać zmiennej sesyjnej z PHP. Nie da się tego zrobić.

Na zmiennej sesyjnej może operować tylko PHP. Oczywiście PHP może wysłać JSowi coś w odpowiedzi na Ajaxa, np. wartość z sesji. JS z kolei może wysłać w Ajaxie do PHP informację np. z nową wartością. To jednak PHP musi obsłużyć sesje, czyli np. odczytać coś z niej albo zmienić wartość, JS nie ma do tego dostępu.
komentarz 5 sierpnia 2020 przez persikk Obywatel (1,140 p.)
No generalnie chciałbym właśnie w JS mieć wartość zmiennej sesyjnej.

Ale nie mam kompletnie pojęcia siedzę kombinuję przekopuje fora ale idzie mi to dość opornie. Dał byś radę mnie jakoś nakierować ?
1
komentarz 5 sierpnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Jak mówiłem, źle do tego podchodzisz, nie dostaniesz się bezpośrednio w JS do sesji.

Możesz sobie w PHP zrobić coś, np.

<?php

echo 'hello world';

po czym Ajaxem wysłać zapytanie do tego pliku i w odpowiedzi w JS będziesz miał hello world. To co "wyrzuci" z siebie PHP, to dostanie JS. Możesz więc też dorobić, aby np. PHP czytał wartość zmiennej sesyjnej i ją zwracał w odpowiedzi oraz odbierał dane z Ajaxa (gdy ten wyśle jakieś pole przez form data czy JSONa) i robił jakąś akcję.

komentarz 5 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
a http protokół i session. GetAttrubute? Dobierze się, całe API na tym miałem oparte że gdy parametr nie leciał po urlu to go z sesji brałem

** doczytałem przepraszam, że sesja ma z PHP lecieć :D
komentarz 5 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)

@Arkadiusz Waluk, Lipny jest ten php, że trzeba specjalnie drugie zapytanie robić żeby otrzymać kompletne dane. Wydaje mi się, ze raczej się da "wrzucić" je do pierwszego response'a.

Btw. Może lepiej skorzystać z localStorage, jeżeli np. używasz tych danych tylko po stronie klienta.

komentarz 5 sierpnia 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Co masz na myśli mówiąc o drugim zapytaniu? Nie widzę problemu żeby sobie to zwrócił razem z pierwszym jeśli przy pierwszym ładowaniu cała witryna jest obsługiwana przez PHP i dana wartość jest wtedy dostępna/potrzebna. Jeśli chce zrobić coś dodatkowo, już po załadowaniu strony, to wysyła kolejnego requesta i to brzmi normalnie.

Być może można zapisać po stronie klienta albo zwrócić to od razu, tego nie wiem, jak na razie pytający mówił tylko o Ajaxie i do niczego więcej nie doszliśmy :p

Podobne pytania

0 głosów
1 odpowiedź 383 wizyt
pytanie zadane 23 maja 2018 w PHP przez jking Początkujący (350 p.)
0 głosów
3 odpowiedzi 157 wizyt
pytanie zadane 15 stycznia 2022 w JavaScript przez Jacek Śmiel Użytkownik (510 p.)
–1 głos
2 odpowiedzi 934 wizyt
pytanie zadane 28 kwietnia 2016 w JavaScript przez Pompero Nowicjusz (200 p.)

92,579 zapytań

141,429 odpowiedzi

319,656 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...