Session ne fonctionne pas quand les cookies sont désactivés.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Session ne fonctionne pas quand les cookies sont désactivés.

par caroube » 12 mai 2008, 08:23

OK. Au temps pour moi. J'avais oublié de recharger la page quand j'ai réactivé les sessions.

par AB » 12 mai 2008, 01:52

ça devrait basculer d'un fonctionnement à l'autre automatiquement...
Non, parce que le serveur ne peut pas, avec une seule page, savoir si les cookies du browser sont actifs ou pas. Le plus simple, c'est que tu poses un cookie, puis que tu essayes de le relire sur une 2e page (une redirection par exemple). Si ce n'est pas OK, tu gère l'identifiant de session dans l'url sinon tu ne t'embêtes pas.

Pour le coup du use_trans_sid, alors là, je sèche. Désolé
Si ça peut se faire de manière transparente comme indiqué dans la doc mentionnée plus haut. On peut toujours employer la constante SID comme dans l'exemple 1 de la doc http://fr.php.net/manual/fr/session.idpassing.php

EDIT cela dit ce n'est pas prudent d'envoyer les identifiants de sessions via l'url. Il faut que les données ne soient pas très importantes. Par exemple, la plupart des sites qui font de la vente en ligne imposent l'activation des cookies pour le fonctionnement des paniers d'achats et de la commande.

par caroube » 12 mai 2008, 00:34

ça devrait basculer d'un fonctionnement à l'autre automatiquement...
Non, parce que le serveur ne peut pas, avec une seule page, savoir si les cookies du browser sont actifs ou pas. Le plus simple, c'est que tu poses un cookie, puis que tu essayes de le relire sur une 2e page (une redirection par exemple). Si ce n'est pas OK, tu gère l'identifiant de session dans l'url sinon tu ne t'embêtes pas.

Pour le coup du use_trans_sid, alors là, je sèche. Désolé

par Invité » 11 mai 2008, 21:35

Merci pour ton bout de code !
ça marche bien effectivement...

Et ça met bien une id et le PHPSSESID dans l'URL.

Le problème, c'est que ça continue à le faire même si je réactive les cookies.

Et c'est quand même assez moche ;-) dans ce cas là.

Ce que je ne comprends pas, au vu du lien http://fr.php.net/manual/fr/session.idpassing.php que tu as mis, c'est que normalement (?), ça devrait basculer d'un fonctionnement à l'autre automatiquement...
Le module de session supporte les deux méthodes. Les cookies sont optimaux, mais comme ils ne sont pas sûrs (tous les internautes ne les acceptent pas), ils ne sont pas fiables. La seconde méthode place l'identifiant de session directement dans les URL.

PHP est capable de faire cela de manière transparente, lorsqu'il est compilé avec l'option --enable-trans-sid.
Et dans mon PHP.INI, je vois bien : session.use_trans_sid = ON..

Donc ça reste un peu mystérieux tout ça ???

par caroube » 11 mai 2008, 17:05

http://fr.php.net/manual/fr/intro.session.php
Chaque visiteur accédant à votre page web se voit assigner un identifiant unique, appelé "identifiant de session". Il peut être stocké soit dans un cookie, soit propagé dans l'URL.
Si les cookies sont interdits, il est donc normal que cela ne fonctionne pas.

Essaye plutôt en passant l'identifiant de session en paramètre et en cliquant sur recharcher :
<?php 
$id = $_GET["id"];
if ($id) {session_id($id);}
session_start() ;// on démarre une session, afin de pouvoir utiliser des variables session 

//affichage du contenu de la variable session 
echo "valeur lue au départ : ".$_SESSION['S_id']."<br>"; 

// inscription dans une variable session 
$_SESSION['S_id']='valeurtest'; 

echo "valeur lue après inscription : ".$_SESSION['S_id']."<br>"; 

$id = session_id();
echo "<a href='?id=$id'>Recharger</a>";
?>
Il y a une confusion dans les sessions : passé sans paramètre, le stockage des sessions (ou du moins d'un identifiant de session) se fait dans un cookie de session plutôt que sur le serveur (sauf bêtise de ma part).

EDIT : l'exemple de cette page est plus simple que le mien.

par vincentg38 » 11 mai 2008, 16:06

J'avoue que les paramètres session.use_cookies et session.use_only_cookies ne sont pas très clairs pour moi, et la doc que tu cites n'est malheureusement pas très explicite...

Si j'essaie de mettre session.use_cookies à Off, en rajoutant le code suivant :
ini_set('session.use_cookies', '0'); 
avant le session_start(), et bien... ça ne marche pas non plus...

???

par FredoMkb » 11 mai 2008, 15:35

Bonjour :)

Je n'ai pas la moindre expérience de la manipulation des configurations Php, mais voici ce que la doc dit à propos des "cookies" :
session.use_cookies boolean
Spécifie si le module utilisera les cookies pour stocker les données de session sur le client. Par défaut, il vaut 1, c'est-à-dire actif.

session.use_only_cookies boolean
Spécifie si le module doit utiliser seulement les cookies pour stocker les identifiants de sessions du côté du navigateur. En l'activant, vous éviterez les attaques qui utilisent des identifiants de sessions dans les URL. Cette configuration a été ajoutée en PHP 4.3.0.
Tu peux trouver toutes ces explications sur cette page...

A priori, je dirais que ça peut venir de l'activation par défaut sur ton hébergeur de la variable session.use_cookies... mais pas sûr en ce qui me concerne... :?

à+ :)

Session ne fonctionne pas quand les cookies sont désactivés.

par vincentg38 » 11 mai 2008, 14:35

Bonjour,

Tout d'abord, j'ai cru comprendre que les sessions PHP permettaient de passer des variables même quand l'utilisateur a désactivé les cookies dans son navigateur. Or, le cas présenté fonctionne bien si les cookies sont activés, mais pas si ils sont désactivés (essais avec IE7 et FF2).

Mon code test :
<?php
session_start() ;// on démarre une session, afin de pouvoir utiliser des variables session

//affichage du contenu de la variable session
echo "valeur lue au départ : ".$_SESSION['S_id']."<br>";

// inscription dans une variable session
$_SESSION['S_id']='valeurtest';

echo "valeur lue après inscription : ".$_SESSION['S_id']."<br>";

?>
Le résultat :

Code : Tout sélectionner

valeur lue au départ : valeur lue après inscription : valeurtest
Normal au premier chargement de la page, mais l'affichage reste le même après avoir rechargé la page : c'est là le pb.

Mon hébergeur : OVH plan 90truc...

Extrait du PHP.INI concernant les sessions :

Code : Tout sélectionner

Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid On On
Voir mon php.ini : http://www.geoweb-events.com/php/php_info.php

Un détail : dans l'URL de la page n'apparait pas le PHPSESSID que, normalement, je m'attendais à voir...

Si qq'un a une idée, ça serait sympa car je tourne en rond... Mauvaise compréhension de ma part, pb de configuration, de code ???

Merci d'avance...