Realiser son propre système de session.

Realiser son propre système de session. - PHP - Programmation

Marsh Posté le 11-03-2003 à 03:19:01    

Pourquoi ? Ben déjà parce que les sessions PHP sont incompatible avec les normes du W3C (problème de input hidden juste après le form) --> Bug de PHP toujours pas corrigé.
 
Quelle est d'après vous la meilleure solution ?
 
J'ai pensé pour ma part créer un identifiant unique pour la première connexion qui se pérénise grace à un passage de cet ID via un input hidden (mais bien placé). --> stockage dans une table et effacement après une certaine durée.
 
Qu'en pensez-vous et comment feriez-vous ?

Reply

Marsh Posté le 11-03-2003 à 03:19:01   

Reply

Marsh Posté le 11-03-2003 à 10:19:26    

hum  :heink:  
depuis qd les sessions créent-elles un tag input hidden ??
Tu as un article là dessus ? je n'ai jamais rien vu de tel.
C'est quoi cet input hidden ?
 
Le numéro de session est passé par un cookie ou par l'url.


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 10:26:09    

...encore un gros boulet !

Reply

Marsh Posté le 11-03-2003 à 10:31:16    

ok ok., je vois mieux :
http://bugs.php.net/bug.php?id=13472

Citation :

When enabling trans-id, php rewrites the forms to add an input
type=hidden. the problem is that, in xhtml strict, inputs have to be in
a fieldset element. when a fieldset element is already here, php still
writes the input type=hidden before the fieldset, causing the page to be
invalid html.


 
je n'ai rien dis.


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 10:44:06    

El_gringo a écrit :

...encore un gros boulet !


C qui le gros boulet ??  :heink:  :heink:  
 
Calmes toi un peu tu veux... Le best of n'est pas loin.  :heink:

Reply

Marsh Posté le 11-03-2003 à 10:46:16    

Bien, maintenant que mes dire ont été vérifiés (humour inside  ;) ), Est-ce que qqu parmi vous à l'expérience d'avoir fait son propre système de session ? Et si oui, comment a-t-il procédé (juste les grandes lignes).
 
Merci.

Reply

Marsh Posté le 11-03-2003 à 10:47:40    

Hermes le Messager a écrit :


[...]
Qu'en pensez-vous et comment feriez-vous ?


J'en pense que c'est beauvoup de travail pour pas grand chose :p Ce bug sera corrigé dans une prochaine version de PHP a n'en pas douter. Alors faire un système de session maison juste pour avoir un beau "Valid xxx document" sur un validateur externe c'est un peu cher payé niveau temps.


Message édité par Core 666 le 11-03-2003 à 10:47:57
Reply

Marsh Posté le 11-03-2003 à 10:49:32    

Et pour réponse à ta deuxième question, un système avec un INPUT TYPE est particulièrement lourd et peu secure. Quant à passer la variable de session par l'URL, c'est vraiment bof d'un point de vue référencement (Google ignore les pages sur lesquelles se balade un PHPSESSID) :(

Reply

Marsh Posté le 11-03-2003 à 10:50:22    

Core 666 a écrit :


J'en pense que c'est beauvoup de travail pour pas grand chose :p Ce bug sera corrigé dans une prochaine version de PHP a n'en pas douter. Alors faire un système de session maison juste pour avoir un beau "Valid xxx document" sur un validateur externe c'est un peu cher payé niveau temps.


 
C tout à fait fait vrai. Mais en fait, je trouve cela intéressant également de voir comment cela pourrait marcher. Autrefois avec le php3 et les sessions absentes, il fallait bien se débrouiller. On apprend toujours plus quand on fait tout soi-même que lorsqu'on utilise des trucs tout prêts, même si dans ce cas précis, il est évident qu'il est 1000 fois plus pratique d'utiliser les sessions php4

Reply

Marsh Posté le 11-03-2003 à 10:51:17    

dans le pire des cas, vire le trans-id :
ini_set('session.use_trans_sid', 0);
mais je suppose que ça empêche une session si l'utilisateur refuse les cookies...
 
Combiné à cela, tu peux faire une fonction qui génère l'url

Code :
  1. function getUrl($monurl){
  2.   if (strpos($monurl,'?')!==false){
  3.     return $monurl.'&'.ini_get('set_session_name').'='.session_id();
  4.   }
  5.   else{
  6.     return $monurl.'?'.ini_get('set_session_name').'='.session_id();
  7.   }
  8. }


ça te permettra de continuer à utiliser les session php qui sont bcp plus efficaces (rapides) sans avoir ce prob


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 10:51:17   

Reply

Marsh Posté le 11-03-2003 à 10:53:25    

Core 666 a écrit :

Et pour réponse à ta deuxième question, un système avec un INPUT TYPE est particulièrement lourd et peu secure. Quant à passer la variable de session par l'URL, c'est vraiment bof d'un point de vue référencement (Google ignore les pages sur lesquelles se balade un PHPSESSID) :(


 
Pourquoi peu sécure ? C'est ce que fait php pourtant.  [:totozzz]  
 
Si l'identifiant est unique et qu'il s'autodétruit après usage, je ne vois pas où est le problème.
Lors de sa création, l'ID peut être stocké dans une table avec une validirté limitée. En fait, c'est à peu de chose près le système des sessions de php4.
 
Je voulais savoir quelle stratégie a été mise en oeuvre par ceux d'entre vous qui ont bcp utilisé php3. (En fait, j'ai débuté php direct avec php4 d'où ma question.)

Reply

Marsh Posté le 11-03-2003 à 10:55:32    

ethernal a écrit :

dans le pire des cas, vire le trans-id :
ini_set('session.use_trans_sid', 0);
mais je suppose que ça empêche une session si l'utilisateur refuse les cookies...
 
Combiné à cela, tu peux faire une fonction qui génère l'url

Code :
  1. function getUrl($monurl){
  2.   if (strpos($monurl,'?')!==false){
  3.     return $monurl.'&'.ini_get('set_session_name').'='.session_id();
  4.   }
  5.   else{
  6.     return $monurl.'?'.ini_get('set_session_name').'='.session_id();
  7.   }
  8. }


ça te permettra de continuer à utiliser les session php qui sont bcp plus efficaces (rapides) sans avoir ce prob


 
Pas con, je vais essyer. Merci déjà pour cette piste.

Reply

Marsh Posté le 11-03-2003 à 10:58:16    

c'est la seule solution que j'ai trouvé pour ce prob de trans-id et les urls générées en javascript.
Pour faire encore mieux, tu pourrais regarder dans cette fonction si un cookie de session existe.  Si pas tu génrères l'url, sinon tu retournes l'url sans modification.

Code :
  1. if (isSet($HTTP_COOKIE_VARS[ini_get('set_session_name')])){
  2. return $monurl;
  3. }
  4. else{
  5. ...
  6. }


Message édité par ethernal le 11-03-2003 à 11:00:08

---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 11:00:06    

ethernal a écrit :

c'est la seule solution que j'ai trouvé pour ce prob de trans-id et les urls générées en javascript.
Pour faire encore mieux, tu pourrais regarder dans cette fonction si un cookie de session existe.  Si pas tu génrères l'url, sinon tu retournes l'url sans modification.


 
Yep, c'est ce que j'étais justement en train de me dire... Je vais tester ça de suite. Je suis en train de faire un forum XHTML 1.1 compliant des pieds à la tête, et ça me fait un peu chier de pas pouvoir être valide alors que je n'y suis pour rien.  :fou:

Reply

Marsh Posté le 11-03-2003 à 11:01:44    

sinon, je suis en train de faire une classe de session compatible php3-php4, mais bon c'est un peu du travail inutile...


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 11:05:19    

ethernal a écrit :

sinon, je suis en train de faire une classe de session compatible php3-php4, mais bon c'est un peu du travail inutile...


 
Merci en tout cas pour tes réponses. Je me met au boulot (même si je crois que concernant le input type="hidden" dans le cas d'un formulaire, aucune solution satisfaisante n'a jusqu'à présent été trouvée (du moins sur la page des rapports de bugs de php). Il faut que je vois ça de plus près.

Reply

Marsh Posté le 11-03-2003 à 11:05:45    

en plus concis :

Code :
  1. function getUrl($monurl){
  2.   if (isSet($HTTP_COOKIE_VARS[ini_get('set_session_name')])){
  3.     return $monurl;
  4.   }
  5.   else{
  6.    return $monurl
  7.           .( (strpos($monurl,'?')!==false)? '&' : '?' )
  8.           .ini_get('set_session_name').'='.session_id();
  9.   }
  10. }


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 11:06:53    

ethernal a écrit :

en plus concis :

Code :
  1. function getUrl($monurl){
  2.   if (isSet($HTTP_COOKIE_VARS[ini_get('set_session_name')])){
  3.     return $monurl;
  4.   }
  5.   else{
  6.    return $monurl
  7.           .( (strpos($monurl,'?')!==false)? '&' : '?' )
  8.           .ini_get('set_session_name').'='.session_id();
  9.   }
  10. }




 
 :)  

Reply

Marsh Posté le 11-03-2003 à 11:20:50    

Bon, dans mon cas, je peux déjà oublier le ini_set('session.use_trans_sid', 0);
 
 
Il est pas pris en compte par le serveur. (Hébergement mutualisé).
 
 :fou:  
 
Pour le bug des URL, j'ai déjà résolu le problème (ancien topic là dessus), avec : ini_set('arg_separator.output','& am p ;';);
 
Par contre pour le problème des formulaires et du input type="hidden", il n'y a effectivement aucune solution dans mon cas.  
C'est rageant quand même l'absence de toute solution viable.  :fou:


Message édité par Hermes le Messager le 11-03-2003 à 11:21:14
Reply

Marsh Posté le 11-03-2003 à 11:36:49    

peut-être que si, mais ça coute cher en temps d'exécution...
la fonction register_shutdown_function("mafonction()" ) permet d'exécuter du code après tout le reste (voir aussi auto-append()).
 
si tu stockes tout ce qui est destiné à être envoyé au client dans une variable, tu peux parser cette variable pour corriger le bug du formulaire.
ob_gz_handler(); (??) //non envoi des données
 
echo 'blabla';
 
$content= ob_...;
 
function parserlapage(){
 global $content;
 str_replace('...','..', $content);
 echo $content;
}
 
register_shutdown_function("parserlapage()" );
 
j'ai comme un doute : la transformation est faites à la volée lors de l'echo je pense, il faut voir si les fonctions ob_ permettent de l'intercepter pour le renvoyer corrigé après.
(j'espère que tu m'as suivi)


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 11:42:19    

Oui, j'ai bien suivi, je vais essayer de ce pas.  :)  Encore merci. Si ça marche, il faudra poster dans le rapport de bug de php, parce que là bas, personne a trouvé de soluces.  :D
 
Edit : Mais bon, ce sera de toutes façons trop lourd pour un forum :D
 
Edit2 : Spa possible, parce qu'on peut plus rien afficher :
 

Citation :

Etant donné qu'aucun affichage n'est possible depuis la fonction func, vous ne pouvez pas y mettre d'informations de débuggage par print() ou echo()!


Message édité par Hermes le Messager le 11-03-2003 à 11:49:12
Reply

Marsh Posté le 11-03-2003 à 12:17:14    

Hermes le Messager a écrit :


C qui le gros boulet ??  :heink:  :heink:  
 
Calmes toi un peu tu veux... Le best of n'est pas loin.  :heink:  


 
G dit ça parce que tu m'énerve en général, à guetter les boulets partout, et toujours chercher à fouttre des trucs dans les topics foireux. J'trouve que tu fais beaucoup le malin, t'as l'air de te penser supérieur à pas mal de monde, alors que, finalement, t'as pas grand chose d'extraordinaire.
Point, g dit ce que j'avais à dire, sur ce, je te propose une seule réponse, histoire qu'on parte pas ds une discution qui mène à rien.

Reply

Marsh Posté le 11-03-2003 à 12:25:45    

El_gringo a écrit :


 
G dit ça parce que tu m'énerve en général, à guetter les boulets partout, et toujours chercher à fouttre des trucs dans les topics foireux. J'trouve que tu fais beaucoup le malin, t'as l'air de te penser supérieur à pas mal de monde, alors que, finalement, t'as pas grand chose d'extraordinaire.
Point, g dit ce que j'avais à dire, sur ce, je te propose une seule réponse, histoire qu'on parte pas ds une discution qui mène à rien.


 
Si je t'énerve, les messages privés, c pas pour les chiens. Et avant de traiter de boulet qqu, tu devrais t'assurer un minimum du bien fondé d'une question (ce que je cherche à faire). Si ma tête ne te revient pas, spa mon problème...
 
Edit : En plus, je vois pas où j'ai pu avoir un problème avec toi. La recherche ne donne rien, au contraire même...  
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
Alors, mon conseil reste le même : Va calmer tes petits nerfs fragiles sur qqu d'autre...  [:totozzz]


Message édité par Hermes le Messager le 11-03-2003 à 12:31:54
Reply

Marsh Posté le 11-03-2003 à 12:35:50    

Hermes le Messager a écrit :


Edit : Mais bon, ce sera de toutes façons trop lourd pour un forum :D
 
Edit2 : Spa possible, parce qu'on peut plus rien afficher :
 

Citation :

Etant donné qu'aucun affichage n'est possible depuis la fonction func, vous ne pouvez pas y mettre d'informations de débuggage par print() ou echo()!




 
oui c'est lourd... :(
 
et si tu n'utilises pas register_shutdown_function
ob_...
echo 'balbla';
$content= ob_...
echo str_replace('','',$content);
 
qu'est-ce que ça dit ?


---------------
...oups kernel error...
Reply

Marsh Posté le 11-03-2003 à 13:04:35    

j'ai utilisé ça pour du PHP3 + Oracle (à la base c'est du MySQL). y'a 2-3 trucs à debugger mais ça marche trés bien.
 
http://developpeur.journaldunet.co [...] ions.shtml


Message édité par Schimz le 11-03-2003 à 13:05:27
Reply

Marsh Posté le 11-03-2003 à 13:27:56    

Merci bien à tous les deux.
 
Je me rend compte qu'il faut que j'utilise les sessions php4 en l'état, et tant pis pour le bug de php, en espérant qu'il soit rapidement corrigé.  :jap:  
 
Les solutions alternatives me feraient perdre un des principaux objectifs du forum que je suis en train de faire --> performance.
 

Reply

Marsh Posté le 11-03-2003 à 13:47:07    

Hermes le Messager a écrit :


 
Si je t'énerve, les messages privés, c pas pour les chiens. Et avant de traiter de boulet qqu, tu devrais t'assurer un minimum du bien fondé d'une question (ce que je cherche à faire). Si ma tête ne te revient pas, spa mon problème...
 
Edit : En plus, je vois pas où j'ai pu avoir un problème avec toi. La recherche ne donne rien, au contraire même...  
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
Alors, mon conseil reste le même : Va calmer tes petits nerfs fragiles sur qqu d'autre...  [:totozzz]  


 
Tient, j'y avais pas pensé : la suite en PV...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed