cs_petitfute
Messages postés20Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention29 avril 2008
-
29 avril 2008 à 19:10
cs_petitfute
Messages postés20Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention29 avril 2008
-
29 avril 2008 à 22:12
bonsoir!
okok! lol
bon je vais essayer de faire simple , et propre.
le script
chat.php
via ajax fait apel au script
reponse.php pour afficher dans le
de
chat.php
les reponses a la requête de
reponse.php.
la requête de reponse.php fonctionne avec un session
".$_SESSION['pseudo']." .
donc le problême, c'est que si je met un session_start sur le script
reponse.php ,
ca me deconnecte comme un session_destroy.
Et si j'enleve le session_start ma requête marche plus.
donc ma question est la suivante:
comment faire passer la session_start vers reponse.php sans qu'il n y est de deconexion?
chat.php
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Chat</title>
<script type="text/javascript">
function plop()
{
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else
{
if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else // XMLHttpRequest non supporté par le navigateur
{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
}
var method = "POST";
var filename = "reponse.php";
<script>
function refresh()
{
plop();
setTimeout("refresh()", 5000);
}
</script>
</head>
<style type="text/css"> </style>
$cnx=mysql_connect("......", "..........", "..........") or die("Pb connexion au serveur".mysql_error());
$db=mysql_select_db("..........") or die("Pb selection base".mysql_error());
mysql_query( "INSERT INTO chat VALUES('', '$expediteur', '$destinataire', '$message', '$timestamp', '')" ); // et tu ne stockes pas le résultat dans une variable ?
}
?>
<?php
mysql_close();
?>
</form>
<script>
refresh();
</script>
</html>
reponse.php
<?php
session_start();
$cnx=mysql_connect("...........", "...........", "...........") or die("Pb connexion au serveur".mysql_error());
$db=mysql_select_db(".............") or die("Pb selection base".mysql_error());
$reponse = mysql_query("SELECT expediteur, message, timestamp FROM chat WHERE destinataire='".$_SESSION['pseudo']."'OR expediteur='".$_SESSION['pseudo']."'");
while ($donnees = mysql_fetch_array($reponse) )
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 29 avril 2008 à 20:19
Salut,
Je comprends pas comment session_start() peut déconnecter...
Si ça déconnecte, c'est alors parce que le SID change. Si le SID change, c'est parce que le cookie de session n'est pas correctement écrit sur le client (navigateur).
Sinon, j'vois pas...
<hr size="2" width="100%" />Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
une fois connecter , cliquer sur une des photos de la premiere page et cliquer sur chat!
attendez 5 seconde , fermer le chat retourner a l'acceuil et clique sur << mon espace >> et la normalement vous etes deconnecté donc vous pourrez pas rentre sur votre espace!
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 29 avril 2008 à 21:17
Oui mais non...
Si tu n'utilises pas session_name(), par défaut, la session s'appelle PHPSESSID
C'est défini dans le fichier php.ini
session_name() sert à MODIFIER le nom de la session (comme il est obligatoire, il y a une valeur par défaut). Donc peu importe que tu le modifies ou non, ça doit fonctionner.
Bon mais le problème se situe peut-être à un autre niveau. Ce ne sont pas les cookies du navigateur, puisque je les ai acceptés, et paf...
J'aimerais bien voir ton code qui gère la connexion du membre, et comment tu vérifies qu'il est connecté.
<hr size="2" width="100%" />Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 29 avril 2008 à 21:23
Oui. Pour voir comment tu gères ça (base de données ou autre), si ça tient la route ou non.
Et aussi le script qui effectue la vérification sur chaque page que le membre est bien connecté.
<hr size="2" width="100%" />Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
$cnx=mysql_connect("................", "..................", "......................") or die("Pb connexion au serveur".mysql_error());
$db=mysql_select_db(".............") or die("Pb selection base".mysql_error());
//Si on vient du formulaire
if (!empty($_POST['pseudo']) && !empty($_POST['mot_de_passe']))
{
$mot_de_passe = mysql_real_escape_string($_POST['mot_de_passe']);
$pseudo = mysql_real_escape_string($_POST['pseudo']);
$en_ligne = online;
$name = $_SESSION['pseudo'];
mysql_query("UPDATE infoclients SET statut='".$en_ligne."', timestamp='".time()."' WHERE pseudo='".$_SESSION['pseudo']."'")or die (mysql_error());
$timestamp_5min time() - (60 * 5); // 60 * 5 nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);
$sql = "select mot_de_passe from infoclients where pseudo='".$pseudo."'";// cette requette veut dire selectionne le mot de passe dans la table infoclients de pseudo
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_assoc($req);
if(mysql_num_rows($req) != 0) {
if($mot_de_passe == $data['mot_de_passe'])
{
//mot de passe correct
$_SESSION['pseudo'] = $pseudo;
$_SESSION['logged'] = true;
}else{ //Le mot de passe n'est pas bon
echo 'mot de passe incorrect';
}
}
else
{ // le pseudo n'existe pas
echo 'pseudo incorrect ,';
echo 'vous devez être inscrit pour pouvoir vous connecté , vous allez être redigé vers la page d inscription.';
include('index.php');
redirection('inscription.php');
}
}
//On ne vient pas du formulaire
if(isset($_SESSION['pseudo']))
{ //on s'est déjà connecté avec succès
// on compte le nombre de messages non lus et dont le destinataire est le membre actuellement connecté
$nbr_non_vus = mysql_query("SELECT COUNT(*) AS nbre FROM mp WHERE destinataire='".$_SESSION['pseudo']."' AND vu='0' AND (efface='0' OR efface='2')")or die(mysql_error());
// on en fait un array
$nbre_non_vus = mysql_fetch_assoc($nbr_non_vus);
?>
<!-- Rappel : debut de la page -->
<head><!-- Rappel : debut information d'en tète -->
<title>uncupidon.com</title>
<!-- Rappel : titre de la page -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design1" href="design1.css" />
</head><!-- Rappel : fin information d'en tète -->
<?php
$reponse = mysql_query("SELECT id FROM infoclients WHERE pseudo='".$_SESSION['pseudo']."'");
echo 'vous devez être inscrit pour pouvoir vous connecté , vous allez être redigé vers la page d inscription.';
include('index.php');
redirection('inscription.php');
cs_petitfute
Messages postés20Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention29 avril 2008 29 avril 2008 à 21:34
et voici pour les connectés
<?php
session_start();
$_SESSION['pseudo'];
// Connexion à MySQL
// D'abord, on se connecte à MySQL
mysql_connect("********", "************", "***********");
mysql_select_db("**********");
$en_ligne = online;
mysql_query("UPDATE infoclients SET statut='".$en_ligne."', timestamp='".time()."' WHERE pseudo='".$_SESSION['pseudo']."'")or die (mysql_error());
// -------
// ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse ip du visiteur
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connexion WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);
if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}
$off_ligne = offline;
$stopchat ="";
// -------
// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :$timestamp_5min time() - (60 * 5); // 60 * 5 nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM connexion WHERE timestamp < ' . $timestamp_5min);
mysql_query("UPDATE infoclients SET statut='".$off_ligne."' WHERE timestamp<'".$timestamp_5min."'")or die (mysql_error());
mysql_query("UPDATE infoclients SET statut='".$stopchat ."' WHERE timestamp<'".$timestamp_3min."'")or die (mysql_error());
// -------
// ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 29 avril 2008 à 22:01
C'est pas exactement ça que je t'ai demandé.
Là, tu me donnes ton script pour compter les membres connectés. Or, ce que je souhaite voir, c'est comment tu vérifies qu'un visiteur est identifié ou non sur ton site.
En tout logique, c'est un script qui doit être présent sur chaque page. Si tu ne vérifies pas et que tu te bases uniquement sur la valeur de la variable $_SESSION['pseudo'], ça peut poser des problèmes.
D'une manière générale, j'ai du mal à m'y retrouver dans ton code. Ce n'est pas très logique.
Supprimer les sessions trop anciennes, tu devrais le faire sur chaque page, avec éventuellement (c'est un peu lourd, mais bon, pour commencer, on va faire comme ça).
Je te recommande VIVEMENT d'avoir un script (moi je l'appelle common.php, ou start.php, bref, peu importe) que tu inclues sur chacune de tes pages nécessitant sessions, bdd, etc.
Ca t'économises franchement un max de lignes, ça t'évite des erreurs, etc.
Dans ce script tu peux mettre :
error_reporting(E_ALL);
Parce que je ne crois pas que toutes les erreurs soient affichées, alors que quand on développe, c'est indispensable (tu en verras : notamment une dûe à $en_ligne = online)
Tu peux aussi y mettre les lignes de connexion à la base de données (puisqu'elles sont récurrentes sur chaque page).
Mets y aussi la gestion des sessions.
Il faut vérifier sur chaque page, systématiquement, si le visiteur est connecté ou non.
Pour cela, vérifier si $_SESSION['pseudo'] est présent, et si le membre en question se trouve bien dans la base de données comme un membre identifié. Si ce n'est pas le cas, il faut supprimer $_SESSION['pseudo']. C'est le moment aussi de faire des tests de sécurité éventuels (durée de la connexion, navigateur utilisé et adresse IP identiques aux valeurs stockées dans la base de données, dans la table qui gère les sessions).
C'est aussi là que tu vas supprimer les sessions trop anciennes : tu n'auras plus à t'en soucier ensuite. Tu exécutes une fois ta requête DELETE, et hop.
Tout ça, il faut le faire avant tout le reste.
A partir de là, si le visiteur est connecté et qu'il se trouve sur la page d'inscription, tu le renvoies sur la page d'accueil.
S'il n'est pas connecté et qu'il se trouve sur une page nécessitant d'être connecté, tu le renvoies sur la page de connexion (avec un lien vers la page d'inscription).
Je pense sincèrement qu'il te manque un peu de méthodologie pour faire un code propre et facilement compréhensible. Là, franchement, ça me demanderait la nuit pour tout comprendre (et je n'ai pas tout ce temps, malheureusement).
Parce que logiquement, utiliser session_start() suffit à conserver une session. Mais je crois que c'est au niveau de ta base de données que ça pêche : tu ne gères pas correctement les sessions de tes visiteurs enregistrés, et je suppose que tu les supprimes de la base un peu trop vite...
Bref, je pense que tu devrais reprendre ton code à tête reposée (la nuit porte conseil) et mettre à plat (sur papier par exemple) toutes les étapes que tu dois suivre dans ton script pour vérifier qu'un membre est connecté ou pas, pour l'enregistrer, le déconnecter, tout ça.
<hr size="2" width="100%" />Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...