web-dev-qa-db-fra.com

PHP Sessions avec cookies désactivés, ça marche?

Aujourd'hui, j'avais une interview sur skype pour un travail en tant que développeur PHP. L'une des questions posées concernait les cookies et les sessions PHP.

La question était de savoir si la session PHP peut être définie et lue, utilisée si les cookies sont désactivés dans le navigateur des utilisateurs?

Je leur ai répondu que non, car PHP, les sessions dépendent par défaut de la configuration d'un cookie de session. Lorsque la session PHP démarre, le nouveau cookie de session est défini avec le nom par défaut PHPSESSID. Ce cookie contient la valeur de cet ID de session, par exemple: ftu63d8al491s5gatuobj39gk7 Le serveur Apache est ensuite créé dans le dossier de dossiers tmp sess_ftu63d8al491s5gatuobj39g7. contenu de cette session, par exemple: test1 | s: 12: "SessionTest1"; test2 | s: 12: "SessionTest2";

Ils m'ont dit que ce n'était pas vrai et que vous pouvez utiliser PHP Sessions même si l'utilisateur désactive les cookies dans son navigateur. 

Ensuite, je leur ai dit que vous pouviez le faire, mais l'identifiant de session serait alors transmis via URL en tant que variable GET. Et ce n'est pas sûr et vous devez le configurer dans php.ini.

Ils discutaient de la façon dont vous pouvez utiliser les sessions PHP même si les cookies sont désactivés dans le navigateur. Et si nous construisions une boutique en ligne, et qu'une mamie utilise notre boutique en ligne et désactive les cookies et qu'elle s'en moque. Et les PHP sessions sont géniales car vous pouvez les utiliser même si l’utilisateur désactive les cookies. J'étais comme wtf, wtf wtf?!?!

J'ai fait le test avec deux fichiers, index.php démarre la session et définit les variables de session. Et puis session.php essaie de lire ces variables de session.

Voici à quoi ça ressemble:

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>

Maintenant, si vous activez les cookies dans votre navigateur, visitez index.php et le session session.php, la session sera imprimée.

Mais, si vous effacez l'historique de votre navigateur et les cookies, puis visitez index.php, puis session.php, vous verrez un tableau vide, n'est-ce pas?

Donc, fondamentalement, ma question est la suivante: ai-je raison? Pouvez-vous utiliser des sessions PHP si vous désactivez les cookies dans votre navigateur? Et le mécanisme de PHP Session par défaut dépend de la définition d'une session BISCUIT?

Mise à jour: Je devenais folle de ça, alors j'ai rappelé le gars avec qui je parlais. Et lui a demandé, la session PHP peut-elle fonctionner sans cookies par défaut? Le gars a dit "oui". Puis je lui ai dit qu'il avait tort et il a répondu: "oui, oui, si tu le dis ..." et commence à rire. Puis je lui ai dit, ok si la session PHP peut fonctionner sans définir de cookie, comment le serveur connaît-il l'ID de session de l'utilisateur/navigateur actuel, s'il n'est pas stocké dans un cookie de session? (Je voulais voir s'il savait que l'identifiant de session peut être passé en tant que variable GET) Et il a été silencieux pendant au moins 20 ans et m'a dit qu'il était administrateur système et que je devrais demander au responsable du développeur. Et qu’il a 43 ans et qu’il a 13 ans d’expérience dans le commerce (il a commencé avec 30? Wtf?), Mais il me fait confiance pour celui-ci. Et je lui ai expliqué comment fonctionne Session et que vous pouvez l'utiliser sans Cookie, mais l'identifiant de session est passé en tant que variable GET. Je lui ai dit que je l'avais bien dit lors d'une interview, mais ils m'ont dit non, non, non ...: S 

Donc, fondamentalement, le gars n'avait aucune idée des sessions PHP et PHP, et c'est lui qui m'a interrogé sur les sessions me disant que la session PHP peut fonctionner sans cookie, même quand je lui ai dit que cela ne pouvait pas être fait et qu'il y avait un moyen d'utiliser PHP Sessions sans cookies mais cela ne fonctionnerait pas par défaut. À la fin, il m'a dit qu'il pensait que les sessions peuvent fonctionner sans cookies car, en tant qu'administrateur système sur ses serveurs, il ne peut jamais voir les sessions dans le dossier tmp?!?! ?

Quoi qu'il en soit, ces gars-là craignent PHP, il n’ya aucun moyen d’accepter une offre d’emploi de leur part, et après tout cela, je ne pense pas qu’ils m’offriront un emploi de toute façon ...

Merci pour tous vos commentaires!

43
Limeni

"Un visiteur accédant à votre site Web se voit attribuer un identifiant unique, appelé id. De session. Il est soit stocké dans un cookie du côté utilisateur , Soit transmis dans l'URL."

Sessions: Introduction

25
user557846

Si session.use_cookies = 1 (cookie activé.)

Si session.use_cookies = 0 (cookie désactivé.)

Si session.use_cookies = 1, la session enregistre l’identificateur de session dans un cookie. En appelant session_id (), récupérez le numéro de session stocké dans un cookie. Les données enregistrées dans le tableau de session se trouvent sur toutes les pages. Si session.use_cookies = 0 Dans ce cas, session ne stocke pas sessionId dans un cookie et vous obtiendrez chaque fois un nouveau sessionId utilisant session_id () et les données stockées dans la session d'autres pages ne seront pas trouvées sur d'autres pages.

8
Ranjan

Oui, la session fonctionnera lorsque les cookies sont désactivés. Mais d’abord, Apache vérifie les paramètres de configuration php . 

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

si ces valeurs sont définies sur true, la session sera automatiquement transmise par POST.

Si les valeurs "--enable-trans-sid" et "--enable-track-vars" sont définies sur FALSE, nous devons passer l'identificateur de session à l'aide de la constante SID.

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

Besoin de définir php.ini

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

Donc, fondamentalement, ma question est la suivante: ai-je raison?

La plupart. Dans le monde réel: OUI.

Pouvez-vous utiliser les sessions PHP si vous désactivez les cookies dans votre navigateur? 

Vous POUVEZ utiliser des sessions PHP sans cookies, tant que l'identité du navigateur est obtenue d'une manière ou d'une autre et donne une valeur unique (et que cette valeur est transmise à la couche de session PHP):

  • iD de session dans GET (méthode "standard" PHP si les cookies ne sont pas autorisés et méthode "autre" que vous avez décrite). Cette valeur est ensuite propagée automatiquement par PHP, par exemple. ajouté à tous les HREF et ainsi de suite. S'il n'est pas propagé en raison de l'échec de la reconnaissance automatique des liens (par exemple, une URL complexe construite en Javascript), il vous incombe de l'indiquer.

Ou - et ici nous ne sommes plus au Kansas:

  • passé entre les nonces avec Auth Digest (ceci est un tour de passe-passe et nécessite bien sûr que tout le site soit derrière un schéma d'authentification d'accès Auth-Digest. Et vous ne pouvez plus utiliser d'authentification factice (c'est-à-dire http: // welcome: [email protected] ) car certains navigateurs, par exemple Internet Explorer, ne les prennent plus en charge pour des raisons de sécurité)} _
  • reconnaître le navigateur d'une autre manière ("empreintes digitales") (c'est normalement (1) suicidaire)
  • Utilisez LSO (Local Shared Objects) pour générer un UUID aléatoire s'il n'existe pas déjà et stockez-le afin qu'il puisse être récupéré lors des accès suivants.
  • autres moyens (voir http://en.wikipedia.org/wiki/Evercookie )

(1) Si vous vous trouviez dans un réseau local sur lequel vous pouvez faire confiance aux adresses IP, vous pouvez associer une "session" à l'adresse IP de l'utilisateur. Vous pouvez appliquer une stratégie stricte "pas de cookies" dans une petite entreprise tout en ayant des sessions utilisateur sans recourir à _GET/_POST pour votre identifiant de session.

5
LSerni

Vous avez raison, la session ne peut pas fonctionner sans les cookies ... Pour illustrer cela, essayez les actions suivantes.

  1. Connexion à Gmail.
  2. Après la connexion désactivé les cookies.
  3. Actualiser la page.

Vous serez à nouveau redirigé vers la page de connexion car le serveur ne peut pas identifier la session.

  1. Maintenant, activez à nouveau les cookies.
  2. Actualiser la page. (Remarque: ne cliquez pas sur le bouton de connexion).
  3. Vous serez automatiquement redirigé vers la boîte de réception Gmail.

Par conséquent, nous pouvons dire que sans cookies, la session ne fonctionnera pas.

De plus, si vous essayez de vous connecter à gmail (en prenant comme exemple, vous pouvez choisir n'importe quel site Web) avec des cookies masqués, le message " Votre navigateur a désactivé les cookies. Assurez-vous que vos cookies sont activés et réessayez. "

0
Rohit Ghotkar

Si c'était moi, je dirais "oui"

Puisque vous pouvez stocker la session dans le formulaire/url quelque part pour passer à la page suivante (très mauvaise idée). Ainsi, en se basant sur sa question, "la session PHP peut-elle être définie et lue, utilisée si les cookies sont désactivés dans le navigateur des utilisateurs?"

Alors, ça devrait être oui. Il peut lire et utilisé.

Cependant, si l'utilisateur ferme le navigateur, il est parti, et c'est tout. (puisque ce gars n'a pas posé de questions sur cette partie)

0
Sruit A.Suk

Oui .. ça va marcher
1.PHP passera un paramètre GET dans l'URL avec le nom PHPSESSID, mais il peut être modifié dans session.name dans le fichier php.ini.
2. Il ajoute une entrée masquée dans les formulaires portant le même nom.

0
Sagar Patil

Vous devrez mettre l'ID de session dans l'URL. Vous devrez modifier votre fichier php.ini, donc si vous êtes sur un hôte partagé, vous devrez le contacter pour savoir ce qu'il va faire pour vous.

0
Amir Rezazadeh