8792 sujets

Développement web côté serveur, CMS

Bonjour à vous,

Je suis un développeur débutant qui commence à se fatiguer nerveusement. Mon projet est simple :
- mise en page CSS faites à partir d’un tutorial de ce site
- include PhP pour remplir les différents div, particulièrement un 'menu' et un 'contenu'
- identification / sessions utilisateurs avec PhP/MySQL en minimaliste, même avec un niveau de sécurité nul (c’est juste pour une démonstration visuelle).

Là où je n’arrive rien c’est au niveau de la gestion des session utilisateurs… Je ne pensais pas être un gros débutant en PhP, mais niveau gestion des sessions je ne sais pas comment m'y prendre. Et avant de poster je vous assure que j'ai écumé google et les docs.
Peut-être que le système d’include complique la gestion des sessions pour un débutant ? Je n'ai donc qu'une page 'index.php' avec un div 'contenu' qui se fait remplir différement suivant le lien du menu sur lequel on a cliqué : index.php?page=inscription, index.php?page=accueil ...
$page = $_GET['page'];
include('$page.php');

Dans mon menu, par défaut, j'ai de quoi me loguer avec deux champs et un bouton qui m'envoie vers une page de verification (qui est donc chargée en include du div 'contenu'). L'identification avec MySQL se passe bien, je rempli mon tableau $_SESSION[ ] à mùa guise mais...

Ou dois-je placer mon session_start(); ? En haut de mon "fichier parent" index.php ? Et donc chaque fois que vais cliquer quelque part (pour changer l'include du 'contenu') session_start() sera donc réexecuté ? Ca peut me poser un soucis ?

Mais surtout, comment clore une session utilisateur ? Ou du moins comment prendre en compte que l'utilisateur a cliqué sur un bouton "déconnexion" certes ? J'avais naïvement tenté le javascript :

<a href='./index.php?page=index' onCLick='javascript:deconnexion()'>Déconnexion</a>
----
function deconnexion(){
document.write("<?php **** ?>");
}
C'est censé pouvoir marcher avec la bonne instruction ça ? Qui serait...
- session_destroy() ? où et comment par rapport au session_start() ?
- unset les variables de session dans $_SESSION[ ]?
- changer une variable comme $_SESSION['acces'] = false, et tester ensuite sa valeur ?
En tout cas il y a franchement quelque chose qui m'échappe parce je n'arrive jamais à me "déconnecter" (faire changer l'affichage en conséquence en fait). J'ai testé les 3 méthodes précédentes en adaptant les tests nécessaire pour détecter si l'utilisateur est identifié ou non mais.. Ca fontionne pas.
J'ai même un énorme plantage en ce moment, la page devient folle est réaffiche sont contenu en boucle sur elle même. Enfin ça explose quoi.

Je suis conscient que mon message est peu être un peu trop vague, mais je vous serais infiniment gréé de me proposer autre chose que www.php.net Smiley ohwell .
Bonjour,

Pour ta première question : oui, session_start() doit être appellée en toute première dans ton fichier parent.

Concernant la déconnexion, tu as plusieurs moyens de procéder tu les cites d'ailleurs (unset et changement de valeur de ta variable de session ... session_destroy() est peut être un peu poussée). Il te suffit juste de faire un test sur la valeur de cette variable de session et en conséquence faire l'include/le require qui va bien ... Smiley cligne

Bonne continuation.
Romain

<edit>T'as opté pour le mauvais forum Smiley decu .</edit>
<edit>Si tes difficultés persistent ... un code php peut aider. Smiley sweatdrop </edit>
Modifié par yodaswii (30 May 2007 - 17:40)
salut,

<a href='./index.php?page=index' onCLick='javascript:deconnexion()'>Déconnexion</a>
----
function deconnexion(){
document.write("<?php **** ?>");
}


hum si je comprends bien j'ai envie de dire attention si tu fais ça du code source est écris mais ca n'executeras pas le code php.
a écrit :
hum si je comprends bien j'ai envie de dire attention si tu fais ça du code source est écris mais ca n'executeras pas le code php.


Oui et non. Smiley smile

Oui, si il s'agit d'une function Javascript.
Non, si il s'agit d'une function php ça va tout simplement planté Smiley biggol .

Je vote pour le Non dans ce contexte. Smiley lol

<edit>Attention à ne pas confondre PHP et Javascript ... les instructions ne sont pas les mêmes Smiley smile Et cela ne fonctionne pas comme ça Smiley cligne !</edit>
Modifié par yodaswii (30 May 2007 - 18:03)
Re,

a écrit :
yodaswii a dit;
Oui, si il s'agit d'une function Javascript.

je parlais du code qui remplacerais **** dans le texte precedent forcement du php. donc je vote aussi non Smiley lol


Habituellement quand on se deconnecte avec un bouton on ne va pas rester dans un même état.

Je ne suis donc pas trop pour l'usage de javascript ici.

En général javascript sert a faire réagir plus vite l'ordinateur que de passer par un rechargement de la page.

mais un delogue raméne souvent l'utilisateur sur la page d'accueil. c'est assez logique deconnecté on a plus rien a faire dans l'espace privé de quelqu'un.

donc je propose ( sachant que je n'ai moi-même fais ce genre de chose que 2-3 fois et que je me suis débrouiller comme j'ai pu )

ton bouton est inclus dans un formulaire ne contenant que lui qui renvoi vers une autre page. celle-ci tue la session d'un session_destroy(); ou tu unset tes variables session et redirige vers l'accueil.
Modifié par CPascal (30 May 2007 - 18:20)
Salut Smiley cligne ,

en complément de ce qui a été dit, j'ajouterais que j'ai pris l'habitude de supprimer un éventuel cookie de session (PHPSESSID par défaut). Donc mes liens déconnexion pointent vers :

logout.php
<?php
session_start();
  $_SESSION = array();
  if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
  }
  session_destroy();
header("Location: login.php");
?>
Pour info : cette technique est tirée de php.net Smiley ravi

A+
Merci.

J'ai réussi à corriger ce vilain problème d'explosage grace à vous Smiley smile . Un coup de form-input-submit vers une page de deconnexion a réglé le problème.

D'ailleurs est-il possible de magouiller pour avoir un lien 'a href' pour soumettre le formulaire ? Je dis ça histoire pour le côté CSS. Enfin je dis ça je ne sait pas ce qui est possible sur un input en CSS.
.... Smiley sweatdrop pk j'ai parlé de ça moi? ( a cause du bouton sans doute)
oui Smiley lol tu peux utiliser un lien avec une image de bouton qui va vers ton logout.php (ou comme tu l'as appelé).
Syrus a écrit :
D'ailleurs est-il possible de magouiller pour avoir un lien 'a href' pour soumettre le formulaire ? Je dis ça histoire pour le côté CSS. Enfin je dis ça je ne sait pas ce qui est possible sur un input en CSS.

Re'

effectivement pour ton lien vers une page de type logout.php tu n'as pas besoin de formulaire et un simple <a href... suffit.

Dans le cas d'un formulaire à ma connaissance tu ne peux pas le soumettre autrement que par un <input... de type submit, button et (cas un peu particulier) de type image. Voir ce post qui en parle.

Et les CSS marchent très bien avec les input Smiley langue

Ex : index.html
<form...
...
<input id="submit" type="submit" value="Envoyer" />
</form>

style.css
#submit {
	margin: 0 5px 5px 0;
	padding: 1px; 
	border: 1px #000 solid; 
	cursor: pointer; 
	color: #fff; 
	background-color: #483d35; 
	width: auto;
}

#submit:hover {    /* ne fonctionne pas avec IE6 */
	border: 1px #FFCC66 solid
}


A+