[Résolu] Vérifier les session_id()

Vérifier les session_id() [Résolu] - PHP - Programmation

Marsh Posté le 14-04-2008 à 16:12:31    

Bonjour à tous,
 
Mon problème est le suivant :
 
J'ai une page qui m'affiche un texte.
 
Lorsque quelqu'un va sur cette page, je récupère son login/groupe windows afin de l'enregistrer dans un fichier ce qui me servira d'historique, mais je dois également afficher tous les utilisateurs étant actuellement sur cette page.
 
Pour récupérer le login/windows, je passe par NTLM donc par session php.
 
Je récupère donc ces infos et je les stocks dans un fichier.
 
Mon réel prb est que lorsque l'utilisateur rafraichit la page, cela créer de nouveau un enregistrment dans le fichier.
 
Je pensais donc faire une condition en disant (vulgarisation algorithme) :
 
Si le session_id() est vide, alors session_start() et enregistrement dans le fichier sinon je ne fait rien
 
Je pense que je me complique la vie.
 
Je veux seulement enregistrer sa premiere connexion et non pas tout (connexion plus réactualisation)
Jspr ne pas trop etre ambiguë
 
Auriez vous des idées.
 
Merci d'avance,  
 
Cordialement,


Message édité par akalaan le 15-04-2008 à 11:25:10
Reply

Marsh Posté le 14-04-2008 à 16:12:31   

Reply

Marsh Posté le 14-04-2008 à 16:25:22    

Tu peut utiliser l'ip du visiteurs/membres, si besoin tu inséres une date au format timestamp pour déterminer le délai a partir du moment ou tu insére une nouvelle ligne.
 
Tu peut aussi utiliser un cookie avec le temps de validité c'est même encore plus simple et recupérable n'importe ou.

Reply

Marsh Posté le 14-04-2008 à 17:52:47    

Non je préférerai me référer au session_id ce qui me permet d'avoir une valeur unique.
 
Finalement j'ai décidé d'inclure le session_id dans mon fichier texte pour ensuite faire un test.

Code :
  1. <?php
  2. session_start();
  3. include_once('ntlm.php');
  4. $file = ('/data/www/testintrafone/historique/test.csv');
  5. if (file_exists($file)) {
  6. $open = fopen($file,'a+');
  7. $tableau= file($file);
  8. $id = session_id();
  9. //echo $id;
  10.  foreach($tableau as $line){
  11.   if(strstr($line,$id)){
  12.    fclose($open);
  13.  }}
  14.  fwrite($open,session_id()."\n" );
  15.  fclose($open);
  16. }else{
  17. echo "Fichier inexistant";
  18. }
  19. ?>


 
Cela enregistre une seule fois la session mais lorsque je fais un refresh de la page, voici l'erreur que ça me donne.

Code :
  1. Warning: fwrite(): 4 is not a valid stream resource in /data/www/testintrafone/test.php on line 17
  2. Warning: fclose(): 4 is not a valid stream resource in /data/www/testintrafone/test.php on line 18


 
Pourriez vous m'aider

Reply

Marsh Posté le 14-04-2008 à 18:03:27    

il y a une raison particuliere a utiliser un fichierplutot qu'une bdd ? parceque ca va etre vite tres long tes tests  
 
et sinon, tu n'ouvre le fichier que si il existe , masi tu ecris dedans quelque soit le cas
 
il n'est donc jamais crée


---------------

Reply

Marsh Posté le 14-04-2008 à 18:31:59    

Pourquoi stocker le session_id dans ton fichier et faire une comparaison, utilise simplement une variable de session avec une condition.

Reply

Marsh Posté le 15-04-2008 à 09:23:46    

Merci pour vos réponses,
 
J'utilise un fichier plutôt qu'une BDD car :
1)_ la page à consulter est destiné à être visualisée par 4 ou 5 personne par soir.
2)_ L'historique sera concervé 1 ou 2 jours et après on viens écraser dessus les nouveaux logs.
3)_ de plus nous commençons à avoir pas mal de bdd (oracle,SQL SERVER, MYSQL) donc je préfère utilisé un fichier au format csv comme ca on pourrait le traiter par la suite.
4)_ je veux utiliser le session_id car je pensais que cela me permettrait d'avoir des enregistrement unique.
 
 
flo850 :
Effectivement, le test n'est pas complet car pour l'instant je veux simplement tester la valeur de la session, c'est du test, je sais que le fichier existe.
 
 
masterpsx:
Qu'entend tu par "utilise simplement une variable de session avec une condition" ?
 
Merci d'avance,

Reply

Marsh Posté le 15-04-2008 à 09:53:09    

akalaan a écrit :

Merci pour vos réponses,
masterpsx:
Qu'entend tu par "utilise simplement une variable de session avec une condition" ?
 
Merci d'avance,


C'est simple le but des sessions, comme pour les cookies, c'est de pouvoir stocker des variables qui seront accessible tant que la session est valide.
exemple :

Code :
  1. session_start();
  2. if (!isset($_SESSION['visitor']))
  3. {
  4.     $_SESSION['visitor'] = 1;
  5.     include_once('ntlm.php'); 
  6. }


Ton fichier ne sera inclus que si la variable $_SESSION['visitor'] existe et donc qu'une session est active.

Reply

Marsh Posté le 15-04-2008 à 11:24:21    

Et bien un grand merci à vous et surtout à toi masterpsx.
Tu avais tout à fait raison, j'ai placé cette variable conditionnel et tout fonctionne.
 
Cela m'agace de ne jamais avoir ce genre d'idée.
 
 
Voici mon code si cela interesse quelqu'un

Code :
  1. $file = ("/data/www/historique/historique.csv" );
  2.    $open = fopen($file,'a+');
  3.    if (file_exists($file)) {
  4.     if(!isset($_SESSION['valid'])){
  5.      $_SESSION['valid']=1;
  6.      //fwrite($open,$ID);
  7.      fwrite($open,$_SESSION['user'].",".$_SESSION['domain'].",".$_SESSION['IP'].",".$_SESSION['date']."\n" );
  8.      //echo "enregistre";
  9.      fclose($open);
  10.     }else{
  11.      //echo "existe deja";
  12.     }
  13.    }else{
  14.     echo "fichier inconnu";
  15.    }


 
Cordialement,


Message édité par akalaan le 21-04-2008 à 10:21:17
Reply

Marsh Posté le 15-04-2008 à 12:00:18    

Pas de problème et bonne continuation.
 
Et ne t'inquiéte pas, c'est difficile de penser a tout surtout pour ses propres scripts, on se complique souvent la vie pour rien :)

Reply

Sujets relatifs:

Leave a Replay

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