[PHP] API Session

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
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
...

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


  • storeman
  • Registratie: April 2004
  • Laatst online: 11-07 06:25
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


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
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.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
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 Anoniem: 80910 op 13-01-2023 14:38 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 11-07 06:25
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"


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
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 Anoniem: 80910 op 13-01-2023 13:59 ]


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
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.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
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 Anoniem: 80910 op 13-01-2023 16:38 ]

Pagina: 1