Vraag PHP Sessies met uitgeschakelde cookies, werkt het?


Vandaag had ik een Skype-interview voor een baan als PHP-ontwikkelaar, een van de gestelde vragen ging over Cookies en PHP Sessions.

De vraag was, kan de PHP-sessie worden ingesteld en gelezen, gebruikt als cookies zijn uitgeschakeld in gebruikers Browser?

Ik heb ze dat niet verteld, omdat PHP Sessies standaard afhangt van het instellen van een sessiecookie. Wanneer de PHP-sessie start, wordt de nieuwe sessie-cookie ingesteld met standaardnaam PHPSESSID en die cookie bevat de waarde van die sessie-id, bijvoorbeeld: ftu63d8al491s5gatuobj39gk7 Vervolgens wordt op de apache-server in het tmp-mapbestand sess_ftu63d8al491s5gatuobj39gk7 gemaakt en wordt de inhoud van die sessie bewaard, bijvoorbeeld: test1 | s: 12: "SessionTest1"; test2 | s: 12: "SessionTest2";

Ze vertelden me dat dit niet waar is en dat je PHP Sessions kunt gebruiken, zelfs als de gebruiker cookies in zijn browser uitschakelt.

Toen heb ik hen verteld dat je dat kunt doen, maar dan zou sessie-id doorgegeven worden via URL als GET-variabele. En dat is niet veilig en je moet het instellen in php.ini.

Ze waren aan het praten hoe je PHP Sessions kunt gebruiken, zelfs als cookies zijn uitgeschakeld in de browser. En wat als we een webwinkel bouwen en een aantal oma maakt gebruik van onze webwinkel en blokkeert cookies en zij vindt het niet erg. En die PHP Sessions zijn geweldig omdat je ze kunt gebruiken, zelfs als de gebruiker cookies uitschakelt. Ik was zoals wtf, wtf?!?!

Ik heb een test gemaakt met twee bestanden, index.php start sessie en stelt sessievariabelen in. En vervolgens probeert session.php die sessievariabelen te lezen.

Zo ziet het eruit:

index.php

<p>This is where I start and set php sessions.</p>

<?php

    session_start();
    $_SESSION['test1'] = "SessionTest1";
    $_SESSION['test2'] = "SessionTest2";

?>

<p>This is a link, that starts new HTTP Request, and tries to read session set on this page:</p>
<p><a href="session.php">Read Session</a></p>

session.php

<?php

    session_start();
    var_export($_SESSION);

?>

<p><a href="index.php">Back</a></p>

Als u nu cookies in uw browser inschakelt, gaat u naar index.php en de sessiesessie bezoek.php wordt de sessie afgedrukt.

Maar als u uw browsergeschiedenis en cookies wist en vervolgens index.php bezoekt en vervolgens session.php bezoekt, ziet u de lege array toch?

Dus eigenlijk is mijn vraag, heb ik gelijk? Kun je PHP-sessies gebruiken als je cookies in je browser uitschakelt? En is het PHP Session-mechanisme standaard afhankelijk van het instellen van een COOKIE-sessie?

Bijwerken: Ik werd er gek van, dus belde ik de persoon met wie ik aan het praten was. En vroeg hem: kan de PHP-sessie standaard werken zonder cookies? De man zei "ja". Toen zei ik dat hij ongelijk had en hij zei: "Ja, ja, als je het zegt ..." en begint te lachen. Toen vertelde ik hem: oké als de PHP-sessie kan werken zonder een cookie in te stellen, hoe zou de server de huidige ID van de gebruiker / browsersessie weten, als deze niet in een sessiecookie is opgeslagen? (Ik wilde zien of hij weet dat sessie-id kan worden doorgegeven als GET-variabele) En hij was minstens 20 jaar stil en vertelde me dat hij een systeembeheerder is en dat ik dat aan de ontwikkelaar moet vragen. En dat hij 43 jaar oud is en een enorme ervaring heeft van 13 jaar in de bussines (hij begon met 30? Wtf?), Maar hij vertrouwt me hierop. En ik legde hem uit hoe Session werkt en dat je het zonder Cookie kunt gebruiken, maar dan wordt sessie-ID doorgegeven als GET-variabele, en vertelde hem dat ik ze dat tijdens een interview vertelde, maar ze zeiden me nee, nee nee ...: S

Dus eigenlijk had de man geen flauw idee van PHP en PHP Sessions, en ja hij was degene die me vroeg naar sessies die me vertelden dat PHP Session zonder cookie kan werken, zelfs als ik hem vertelde dat het niet kan, en dat er is een manier om PHP Sessions zonder cookies te gebruiken, maar het zal niet standaard werken. Hij was als, nee nee nee ... Aan het einde vertelde hij me dat hij dacht dat sessies zonder cookies kunnen werken omdat hij, als systeembeheerder op zijn servers, nooit sessies in de map tmp kan zien?!?!?

Hoe dan ook, die jongens zuigen naar PHP, er is geen manier om een ​​baanaanbieding van hen te accepteren, en na dit alles denk ik niet dat ze me toch een baan zullen aanbieden ...

Bedankt voor alle opmerkingen!


40
2017-09-24 20:07


oorsprong


antwoorden:


"Een bezoeker die toegang heeft tot uw website krijgt een unieke ID toegewezen, de   het zogenaamde sessie-ID. Dit wordt opgeslagen in een cookie op de gebruiker   kant of wordt gepropageerd in de URL. "

Sessies: introductie 


25
2017-09-24 20:14



Als session.use_cookies = 1 (Cookie ingeschakeld.)

Indien session.use_cookies = 0 (Cookie uitgeschakeld.)

Als session.use_cookies = 1 slaat de sessie het sessionId op in een cookie. Door session_id () te bellen, wordt de opgeslagen sessionId uit de cookie en opgeslagen data in sessie-array op alle pagina's gevonden. Als session.use_cookies = 0 In dit geval slaat sessie geen sessionId op in een cookie en u krijgt telkens een nieuwe sessionId met session_id () en de gegevens die in de sessie op andere pagina's zijn opgeslagen, worden niet op andere pagina's gevonden.


8
2017-07-25 05:13



Ja, de sessie werkt wanneer cookies zijn uitgeschakeld. Maar controleer eerst de php-configuratie-instellingen. Graag willen:

   --enable-trans-sid
and
   --enable-track-vars

als deze waarde is ingesteld, wordt de sessie automatisch door POST doorgegeven.

Als de waarden "--enable-trans-sid" en "--enable-track-vars" zijn ingesteld op FALSE, moeten we sessie-id doorgeven met behulp van de constante SID.

< a href="index.php?<?= SID ?>" >Navigate from here< /a >

Noodzaak om php.ini in te stellen

ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);

5
2017-09-04 14:18



Dus eigenlijk is mijn vraag, heb ik gelijk?

Meestal. In de echte wereld: JA.

Kun je PHP-sessies gebruiken als je cookies in je browser uitschakelt?

Je KUNT PHP-sessies gebruiken zonder cookies, zolang de identiteit van de browser op de een of andere manier wordt verkregen en een unieke waarde oplevert (en deze waarde wordt doorgegeven aan de PHP sessielaag):

  • sessie-ID in GET (wat de "standaard" PHP-manier is als cookies niet zijn toegestaan, en de "andere" manier die u hebt beschreven). Deze waarde wordt vervolgens automatisch door PHP vermenigvuldigd, b.v. toegevoegd aan alle A HREF's enzovoort. Waar het niet wordt verspreid omdat de automatische linkherkenning is mislukt (bijvoorbeeld een complexe URL die is gebouwd in Javascript), is het uw verantwoordelijkheid om dienovereenkomstig te voorzien.

Of - en hier zijn we niet meer in Kansas:

  • gepasseerd tussen de nonces met Auth Digest (dit is een smerige truc, en natuurlijk is vereist dat de hele site achter een Auth-Digest-toegangsauthenticatieschema staat. En je kunt niet langer een "dummy auth" (d.w.z. http: // welkom: guest@www.example.com ) omdat sommige browsers, b.v. Internet Explorer, ondersteun ze niet meer om veiligheidsredenen)
  • de browser op een andere manier herkennen ("vingerafdrukken") (dit is normaal (1) suïcidaal)
  • Gebruik LSO (Local Shared Objects) om een ​​willekeurige UUID te genereren als deze er nog niet is, en sla deze op zodat deze bij volgende toegangen kan worden opgehaald.
  • andere manieren (zie http://en.wikipedia.org/wiki/Evercookie )

(1) als u zich in een LAN bevond waar u de IP's kunt vertrouwen, kunt u een "sessie" aan het gebruikers-IP koppelen. U kunt een streng "geen cookies" -beleid afdwingen in een klein bedrijf en nog steeds gebruikerssessies hebben zonder gebruik te maken van _GET / _POST voor uw sessie-ID.


5
2017-09-24 20:14



Als ik het was, zou ik zeggen "Ja"

Omdat je de sessie in formulier / url ergens kon opslaan om door te geven naar de volgende pagina (heel slecht idee). Dus, op basis van zijn vraag "kan PHP-sessie worden ingesteld en gelezen, gebruikt, als cookies zijn uitgeschakeld in gebruikers Browser?"

Dan zou het ja moeten zijn. Het kan lezen en gebruiken.

Als de gebruiker echter de browser sluit, is deze verdwenen en dat is het dan. (aangezien die gast niet naar dit gedeelte heeft gevraagd)


0
2018-02-28 10:56



Ja .. Het zal werken
1.PHP zal één GET-parameter in URL met de naam PHPSESSID doorgeven, maar deze kan session.name in php.ini-bestand worden gewijzigd.
2. Het voegt één verborgen invoer toe in formulieren met dezelfde naam.


0
2017-09-19 07:13



U moet de sessie-ID in de URL plaatsen. U moet uw php.ini-bestand wijzigen, dus als u op een gedeelde host werkt, moet u contact met ze opnemen om te zien wat ze voor u zullen doen.


0
2018-06-17 15:04