• User Newbie

    Problema refresh pagina

    Salve, espongo il mio problema:
    nel mio sito ho una pagina che utilizza le sessioni per il login e fa un refresh ogni tot minuti per poter aggiornare il conteggio delle visite ed altri elementi di controllo quali ingresso utenti registrati, ip utenti ed altro ... gestiti prevalentemente tramite file di testo. La suddetta presenta anche una mini chat in java script che ricorre ad un database mysql per la gestione delle mie query con i vari utenti. Capita che a volte, al momento del refresh, la pagina sembra reindirizzarsi a vuoto e va in time out. A quel punto l'unico modo per ripristinarla è chiudere il browser, eliminare cookie ed ultimi accessi dalla cronologia recente e rieffettuare il login ( non mi ridà segni di vita in nessun altro modo ). Anche se non ne sono sicuro credo che il problema sia legato al fatto che può capitare che il refresh avvenga casualmente nello stesso istante in cui viene interrogato il database e che quindi in qualche modo ci sia un'interrogazione o ricezione di dati doppia che ne manda fuori giri l'esecuzione dello script della pagina. Premesso che suppongo che questo problema sia effettivamente dovuto al refresh ( magari non è così ) e che quindi potrei risolvere eliminando il refresh e ricorrendo ad elementi dinamici, magari in ajax, per la visualizzazione dei dati aggiornati, sono curioso di capire dove sia il reale intoppo e quale sia una soluzione plausibile senza dover eliminare l'utilizzo del refresh ... in quanto proprio non ne vengo a capo.
    Ringraziando tutti per l'attenzione ed allego le porzioni di codice delle pagine di interesse
    Pagina in questione:

    <?php session_start(); header("refresh: 320;"); if(!$_SESSION['nomelog']) header("Location:../index.php"); if(isset($_SESSION['nomelog'])){ $lista3=file_get_contents("../psw.txt"); if(("|".$_SESSION['nomelog']."|") != $lista3) header("Location:../riservata/index.php"); if(("|".$_SESSION['nomelog']."|") == $lista3) $_SESSION['username'] = "mionome" ; $nomelog = $_SESSION['nomelog']; $p=fopen("../contatore.txt","r+"); $count=fgets($p,30); fseek($p,0);} ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ".../TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ".../TR/html4/loose.dtd" > <!-- --> <html xmlns=".../1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <LINK REL="shortcut icon" HREF="../images/ico1.ico"> <title>MiaPagina</title> <meta name="keywords" content="" /> <meta name="description" content="" /> <link href="../default.css" rel="stylesheet" type="text/css" /> <link type="text/css" rel="stylesheet" media="all" href="css/chat.css" /> <link type="text/css" rel="stylesheet" media="all" href="css/screen.css" /> <!--[if lte IE 7]> <link type="text/css" rel="stylesheet" media="all" href="css/screen_ie.css" /> <![endif]--> </head> <body> <style type="text/css">div.allinea { float:left; margin-left:80px; }</style> <br><br> <div class="allinea"> <h1 align="center" face="Comic Sans MS"> MiaPagina </h1> </div> <div class="allinea"> <font face="Comic Sans MS" color="green" size="4px"><font color="red" align="center"> </p><b>Gestione ID:&nbsp</b></font> <form name="form2" method="post" action="modificautenti.php"> <textarea name="listautenti" id="listautenti" style="width:160px;resize:none;border:solid 2px blue; height:125px;padding:10px;color:blue;font-size:15px;"> <?php include ("../utenti.txt"); ?> </textarea> <br><br> <input type="submit" id="searchbutton" name="scrivi2" value="Modifica" style="height:30px;padding:4px;color:blue;" title="Modifica lista utenti"> </form> </div> <div align="right"> <form name="form1" method="post" action="logout.php"> <input type="submit" id="searchbutton" name="logouthome" value="Logout" style="height:30px;padding:4px;color:blue;" title="Effettua il logout"> </form> <?php $registrati = count(file("../utenti.txt")) - 2; ?> <font face="Comic Sans MS" color="green" size="2px"><font color="#9966CC" align="left"> </p><b>Iscritti:&nbsp</b></font> <font color="grey" align="left"> <?php echo $registrati ?>&nbsp&nbsp&nbsp </font> <font face="Comic Sans MS" color="green" size="2px"><font color="green" align="left"> </p><b>Visite:&nbsp</b></font> <font color="red" align="left"> <?php echo $count ?>&nbsp&nbsp&nbsp </font> </div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/chat.js"></script> </body> </html> Pagina relativa alla chat e mysql:

    define ('DBPATH','server'); define ('DBUSER','user'); define ('DBPASS','psw'); define ('DBNAME','name'); session_start(); global $dbh; $dbh = mysql_connect(DBPATH,DBUSER,DBPASS); mysql_selectdb(DBNAME,$dbh); mysql_query("set time_zone = 'Europe/Rome'"); date_default_timezone_set('Europe/Rome'); if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); } if ($_GET['action'] == "sendchat") { sendChat(); } if ($_GET['action'] == "closechat") { closeChat(); } if ($_GET['action'] == "startchatsession") { startChatSession(); } if (!isset($_SESSION['chatHistory'])) { $_SESSION['chatHistory'] = array(); } if (!isset($_SESSION['openChatBoxes'])) { $_SESSION['openChatBoxes'] = array(); } function chatHeartbeat() { $sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC"; $query = mysql_query($sql); $items = ''; $chatBoxes = array(); while ($chat = mysql_fetch_array($query)) { if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) { $items = $_SESSION['chatHistory'][$chat['from']]; } $chat['message'] = sanitize($chat['message']); $items .= <<<EOD { "s": "0", "f": "{$chat['from']}", "m": "{$chat['message']}" }, EOD; if (!isset($_SESSION['chatHistory'][$chat['from']])) { $_SESSION['chatHistory'][$chat['from']] = ''; } $_SESSION['chatHistory'][$chat['from']] .= <<<EOD { "s": "0", "f": "{$chat['from']}", "m": "{$chat['message']}" }, EOD; unset($_SESSION['tsChatBoxes'][$chat['from']]); $_SESSION['openChatBoxes'][$chat['from']] = $chat['sent']; } if (!empty($_SESSION['openChatBoxes'])) { foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) { if (!isset($_SESSION['tsChatBoxes'][$chatbox])) { $now = time()-strtotime($time); $time = date('d/m/Y', strtotime($time)); $ora = Date("H:i:s"); $userIP1=getenv("REMOTE_ADDR"); $lista=file_get_contents("../ip.txt"); $lista4=file_get_contents("../ipban.txt"); $nomelog1="|".$userIP1."|"; $lista3=file_get_contents("../psw.txt"); $o=fopen("../online.txt","r+"); $online=fgets($o,30); fseek($o,0); $message = "Inviato il $time" ." alle " ."$ora"; if($online == "0") { $message = "*** Al momento non sono online, riprova più tardi o lasciami un messaggio via e-mail "; $items .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; if (!isset($_SESSION['chatHistory'][$chatbox])) { $_SESSION['chatHistory'][$chatbox] = ''; } $_SESSION['chatHistory'][$chatbox] .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; $_SESSION['tsChatBoxes'][$chatbox] = 1; } if (stripos($lista,$nomelog1) !== FALSE or stripos($lista4,$nomelog1) !== FALSE and $nomelog != $lista3) { $message = " purtroppo sei stato bannato ***"; $items .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; if (!isset($_SESSION['chatHistory'][$chatbox])) { $_SESSION['chatHistory'][$chatbox] = ''; } $_SESSION['chatHistory'][$chatbox] .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; $_SESSION['tsChatBoxes'][$chatbox] = 1; } if ($now > 60) { $items .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; if (!isset($_SESSION['chatHistory'][$chatbox])) { $_SESSION['chatHistory'][$chatbox] = ''; } $_SESSION['chatHistory'][$chatbox] .= <<<EOD { "s": "2", "f": "$chatbox", "m": "{$message}" }, EOD; $_SESSION['tsChatBoxes'][$chatbox] = 1; } } } } $sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0"; $query = mysql_query($sql); if ($items != '') { $items = substr($items, 0, -1); } header('Content-type: application/json'); ?> { "items": [ <?php echo $items;?> ] } <?php exit(0); } function chatBoxSession($chatbox) { $items = ''; if (isset($_SESSION['chatHistory'][$chatbox])) { $items = $_SESSION['chatHistory'][$chatbox]; } return $items; } function startChatSession() { $items = ''; if (!empty($_SESSION['openChatBoxes'])) { foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) { $items .= chatBoxSession($chatbox); } } if ($items != '') { $items = substr($items, 0, -1); } header('Content-type: application/json'); ?> { "username": "<?php echo $_SESSION['username'];?>", "items": [ <?php echo $items;?> ] } <?php exit(0); } function sendChat() { $userIP1=getenv("REMOTE_ADDR"); $lista=file_get_contents("../ip.txt"); $nomelog1="|".$userIP1."|"; $o=fopen("../online.txt","r+"); $online=fgets($o,30); fseek($o,0); if (stripos($lista,$nomelog1) === FALSE and $nomelog != '---' and $online != '0') { $from = $_SESSION['username']; $to = $_POST['to']; $message = $_POST['message']; $_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time()); $messagesan = sanitize($message); if (!isset($_SESSION['chatHistory'][$_POST['to']])) { $_SESSION['chatHistory'][$_POST['to']] = ''; } $_SESSION['chatHistory'][$_POST['to']] .= <<<EOD { "s": "1", "f": "{$to}", "m": "{$messagesan}" }, EOD; unset($_SESSION['tsChatBoxes'][$_POST['to']]); $sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())"; $query = mysql_query($sql); echo "1"; exit(0); } } function closeChat() { unset($_SESSION['openChatBoxes'][$_POST['chatbox']]); echo "1"; exit(0); } function sanitize($text) { $text = htmlspecialchars($text, ENT_QUOTES); $text = str_replace("\n\r","\n",$text); $text = str_replace("\r\n","\n",$text); $text = str_replace("\n","<br>",$text); return $text; } ?>