Toon posts:

[PHP] API Session

Pagina: 1
Acties:

Vraag


  • raxon
  • Registratie: Maart 2003
  • Laatst online: 29-01 21:34
Stel je hebt een frontend:
admin.domain.extension
en een api:
api.domain.extension

Nu doet de browser wel een sessie starten op admin.domain.extension maar niet op de api, wat ik graag zou willen om bijvoorbeeld de user rollen en permissies in de api sessie te bewaren zodat ie niet elke keer een mysql query daarvoor uit moet voeren.

nu heb ik geprobeerd met header een "set-cookie" te doen en een "cookie" te zetten voordat ik de request verstuur maar dat houdt de browser tegen.

Is het mogelijk om dit op een andere manier te doen. Ik heb op de api wel een url om de state te bewaren / op te vragen wat via een sessie loopt en via postman goed lijkt te werken. de url is dan http://api.domain.extension/state/{{$uuid:uuid}}/ om hem te bewerken en
http://api.domain.extension/state/ om hem aan te maken.

Maar de backend kan daar niet bij omdat ie niet de juiste session id binnenkrijgt.

Iemand een idee ?
of moet ik in de database een sessie op gaan slaan en een sessie id meesturen naar de api ?


ik gebruik php, javascipt, mysql
...

RaXon

Beste antwoord (via raxon op 13-01-2023 14:33)


  • storeman
  • Registratie: April 2004
  • Laatst online: 23:22
Ik neem aan dat je de sessie-cookie vanuit PHP naar de browser stuurt en niet dat je een javascript oplossing gebruikt?

Je kunt een sessie in principe aan het top level domain hangen en daarmee cross-subdomain maken. Dit staat ingesteld in de php.ini:
https://www.php.net/manua...ini.session.cookie-domain

"Chaos kan niet uit de hand lopen"

Alle reacties


  • RobIII
  • Registratie: December 2001
  • Laatst online: 04:38

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Kijk eens naar CORS ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • raxon
  • Registratie: Maart 2003
  • Laatst online: 29-01 21:34
Ja dat gebruik ik,

ik heb dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static function cors(App $object){
        header("HTTP/1.1 200 OK");
        //header("Access-Control-Allow-Origin: *");
        if (array_key_exists('HTTP_ORIGIN', $_SERVER)) {
            $origin = $_SERVER['HTTP_ORIGIN'];
            if(Core::cors_is_allowed($object, $origin)){
                header("Access-Control-Allow-Origin: {$origin}");
                header('Access-Control-Allow-Credentials: true');
            }
        }
        if (
            array_key_exists('REQUEST_METHOD', $_SERVER) &&
            $_SERVER['REQUEST_METHOD'] == 'OPTIONS'
        ) {
            header('Access-Control-Allow-Credentials: true');
            header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
            //header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
            header('Access-Control-Allow-Headers: Origin, Cache-Control, Content-Type, Authorization, X-Requested-With');
            header('Access-Control-Expose-Headers: Cache-Control, Content-Language, Content-Length, Content-Type, Expires, Last-Modified, Pragma');
            header('Access-Control-Max-Age: 86400');    // cache for 1 day
            exit(0);
        }
    }



ik heb toegevoegd aan


Uhm dit is een ander stukje, ik gebruik ook een bearer token:

je bedoelt dat ik de rollen en permissies in het bearer token object moet gaan opslaan ? dan past het denk ik niet meer in een cookie... of wellicht zippen...

[Voor 65% gewijzigd door raxon op 13-01-2023 14:38]

RaXon


Acties:
  • Beste antwoord
  • 0Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 23:22
Ik neem aan dat je de sessie-cookie vanuit PHP naar de browser stuurt en niet dat je een javascript oplossing gebruikt?

Je kunt een sessie in principe aan het top level domain hangen en daarmee cross-subdomain maken. Dit staat ingesteld in de php.ini:
https://www.php.net/manua...ini.session.cookie-domain

"Chaos kan niet uit de hand lopen"


  • raxon
  • Registratie: Maart 2003
  • Laatst online: 29-01 21:34
ik zie dat ik deze nog niet gebruik:

The server must not specify the "*" wildcard for the Access-Control-Expose-Headers response-header value, but must instead specify an explicit list of header names; for example, Access-Control-Expose-Headers: Content-Encoding, Kuma-Revision

Heb ik toegepast zonder resultaat...

Ik wilde eventueel de session_id gaan opslaan in javascript en dan een custom header meesturen zoals:
Een X-Session-Id header kunnen aanmaken, maar ik probeer eerst ff bovenstaande.

storeman, ik denk dat dan de api en frontend op dezelfde server moeten staan, anders komt ie niet bij zijn sessie id ?

[Voor 3% gewijzigd door raxon op 13-01-2023 13:59]

RaXon


  • raxon
  • Registratie: Maart 2003
  • Laatst online: 29-01 21:34
ik heb het inmiddels voor elkaar gekregen met de functie session_set_cookie_params() te gebruiken en deze op "domain" en "extension" te zetten ipv blanco, ga nu testen met secured & httpOnly dan hoef ik hem in javascript niet te gebruiken. Mooi dan kan ik weer verder met het oplossen van de user naar de sessie te verplaatsen waardoor de mysql server load naar 1x gaat per sessie.

RaXon


  • raxon
  • Registratie: Maart 2003
  • Laatst online: 29-01 21:34
storeman schreef op vrijdag 13 januari 2023 @ 13:29:
Ik neem aan dat je de sessie-cookie vanuit PHP naar de browser stuurt en niet dat je een javascript oplossing gebruikt?

Je kunt een sessie in principe aan het top level domain hangen en daarmee cross-subdomain maken. Dit staat ingesteld in de php.ini:
https://www.php.net/manua...ini.session.cookie-domain
met javascript mag je die niet gebruiken (set-cookie & cookie) krijg je netjes een error als je die headers mee stuurt.

Heb dit als config:

JSON:
1
2
3
4
5
6
"cookie" : {
                "path": null,
                "domain": true,
                "httponly": true,
                "samesite": "strict"
            }

Secure wordt op Host::scheme gecontroleerd en indien Host::SCHEME_HTTPS op true gezet.

Waarbij domain op host.domain() .'.'. host.extension() wordt gezet. dan is de cookie id voor de frontend / backend hetzelfde. had net ook een cookie met 2 sessid maar dan weet je weer niet welke bij welke moet zijn.

its alive: PHPSESSID=priktg657l6q0i26gresdaojp8 (prikt jezus)

[Voor 34% gewijzigd door raxon op 13-01-2023 16:38]

RaXon

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee