[PHP] problemi con session_start

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Avrei un piccolo problema con session_start ed il seguente. In teoria almeno credo quando nel mio file paginaris.php lo vado a far girare, mi dovrebbe dare errore 404, cosa che invece non mi da. Come mai ???? Se mi loggo va tutto bene ma come se una volta loggato non uscisse più dal login. Invece prima funzionava ad hoc. Ossia se lo facevo girare mi dava errore 404. Questo è lo spezzone di codice della paginaris.ph forse mi sono dimenticato qualcosa ????

PHP:
<link rel="stylesheet" type="text/css" href="coloredisfondo.css">
 <link rel="stylesheet" type="text/css" href="thumb.css">
    <?php
require_once("connetti.php");
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

session_start();

if(isset($_SESSION['nome'])) {

$array = mysql_query("SELECT * FROM utenti WHERE id=".$_SESSION['id']." '");

 //  $array=mysql_fetch_array($array);  
   
}


  ?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title>

<body>
   
<?php
session_start();


$array =  strtoupper($_SESSION['nome'] );     
 if(isset($_SESSION['nome']))  {   

    echo "<div class=\"messaggio\"><h1>";

   
echo "BENVENUTO ".$array."<br />";
   
    echo $me;
    echo "</h1></div>";
    echo "</body></html>";

}else{
    header("Location:failed.php");     
    exit();   
//}

}

//Visualizza l'avatr contenuto nel db

//$query =mysql_query("SELECT immagine FROM immagine WHERE id = $id");
// Codice che unisce due o più tabelle

$query =mysql_query("SELECT utenti.id, utenti.nome, immagine.immagine FROM utenti INNER JOIN
 immagine ON utenti.id =  immagine.id_nome WHERE id_nome = ".$_SESSION['id']);


while($foto=mysql_fetch_array($query))
   
{

 ?>
    <br> <br>       
    <img src="immages/<?php echo$foto["immagine"]?>" class="immages">
   
   
   
<?php
}

// Ricerca e visualizza l'utente che si è connesso con le info

$row = mysql_fetch_array(mysql_query("SELECT * FROM utenti WHERE id='".$_SESSION['id']."'"));
echo "<br> <br>";


        echo "Nome e cognome: ".$row['cognome'] . " ".$row['nome'];
       
        echo "<br>";
        echo "Username: ". $row['username'];
        echo "<br>";
        echo "EMail: ".$row['email'];
       
 ?>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
 <center> <br> <br>

<input type="button" onClick="window.location.href='upload.php';" style='padding:10px' value="Upload" />
<input type="button" onClick="window.location.href='modifica.php';" style='padding:10px' value="Modifica" />
<input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
 </center>
    </body>
</html>

Spero in un vostro aiuto. Credo che non sia un crosspost. E' tutt0altro problema. Grazie.
 
Ciao, prova innanzitutto a inserire il session_start() nella primissima riga del file, prima del tag <Html> e anche prima del <!DOCTYPE>, inserendolo una volta sola (vedo che lo hai inserito due volte).
 
Sì vero proverò anche così. Ma ho ovviare a distruggere la sessione è quindi è per questo che rimaneva sempre fissa. Difatti messo destroid_session è andata come dicevo io. Comunque apportare anche le modifiche date consigliato mi. Si può avere la distruzione della sessione a tempo ???? Grazie.
 
Non credo di aver capito cosa vuoi. Provo a rispondere a sentimento.

Per distruggere la sessione basta che aggiungi l'istruzione session_destroy(). Ovviamente distruggi la sessione quando le informazioni dell'utente non ti servono più, tendenzialmente quando si effettua il logout.
 
Puoi settare il cookie e farlo scadere dopo tot secondi.
PHP:
setcookie ("ultimoaccesso", $valore_cookie, time() + $durata_in_secondi);
// la variabile $durata_in_secondi non è altro che un intero che rappresenta appunto i secondi
// un valore pari a 60 farà scadere il cookie dopo un minuto
// un valore pari a 600 farà scadere il cookie dopo dieci minuti
// il valore 365 *24*3600 invece equivale a un anno.


Se invece al posto del cookie vuoi far scadere proprio la sessione, potresti procedere in questo modo.

1. Quando l'utente effettua il login salvi in tabella il timestamp corrente (che chiamiamo x)

2. A ogni pagina visitata dall'utente (o qualsiasi altra azione) confronti il timestamp corrente (y) con il timestamp precedente che hai salvato in tabella (x)

3.1. Se la differenza tra y e x corrisponde a un arco di tempo maggiore di 10 minuti (per esempio) , fai scadere la sessione e costringi l'utente a effettuare nuovamente il login

3.2. Se invece la differenza tra y e x corrisponde a un arco di tempo minore o uguale a 10 minuti, aggiorni il timestamp in tabella ponendo y=x e permetti all'utente di procedere.
 
Concettualmente mi piace. Bisognerebbe capire come realizzare una cosa del genere che sicuramente sul forum ci saranno degli esempi. Una cosa ma s può gestire il tasto "x" del browser in alti a d nel mio caso con Firefox in modo tale che quando lo clicchi su distrugge la sessione? ???
 
Questo è il comportamento di default, ossia le sessioni vengono distrutte alla chiusura del browser.
 
Ciao AdeKnite,

Vorrei sapere una cosa, pensvo per vedere una pagina protetta fatta da me con session_start bastasse togliere o decommentare "session_start", ma invece mi sbagliavo. Come posso fare per vederla senza che mi debba registrare e modificare tutto il codice ???
 
Beh, se l'hai protetta bene, avrai sicuramente bisogno di alcune credenziali, immagino.
Se vuoi vederla senza dover inserire quelle credenziali e senza modificare tutto il codice, basta che togli la protezione.

Ora non so come hai strutturato la pagina e il relativo codice, per cui non posso essere molto mirato con la risposta.
 
Ti mando il codice, le ho provate tutte ma non ci sono riuscito. Fra le altre cose non riesco nemmeno ad entrare con le credenziali che ho messo e non capisco il perchè. Una volta mi partiva l'email per l'attivazione utente adesso non mi parte più. Quindi uno dei moti sicuramente è quetso. Però sono andato su phpmyadmin ho un campo chiamato in questa maniera qua:

attivo ENUM('1', '0') DEFAULT '0',

L'ho modificato ad "1" a mano ma non mi accetta. Non capisco il perchè. Questo è il codice della paginaris.php

PHP:
<link rel="stylesheet" type="text/css" href="coloredisfondo.css">
 <link rel="stylesheet" type="text/css" href="thumb.css">
    <?php
require_once("connetti.php");
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

session_start();

if(isset($_SESSION['nome'])) {

$array = mysql_query("SELECT * FROM utenti WHERE id=".$_SESSION['id']." '");

 //  $array=mysql_fetch_array($array);  
   
}


  ?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title>

<body>
   
<?php



$array =  strtoupper($_SESSION['nome'] );     
 if(isset($_SESSION['nome']))  {   

    echo "<div class=\"messaggio\"><h1>";

   
echo "BENVENUTO ".$array."<br />";
   
    echo $me;
    echo "</h1></div>";
    echo "</body></html>";

}else{
    header("Location:failed.php");     
    exit();   
//}

}

//Visualizza l'avatr contenuto nel db

//$query =mysql_query("SELECT immagine FROM immagine WHERE id = $id");
// Codice che unisce due o più tabelle

$query =mysql_query("SELECT utenti.id, utenti.nome, immagine.immagine FROM utenti INNER JOIN
 immagine ON utenti.id =  immagine.id_nome WHERE id_nome = ".$_SESSION['id']);


while($foto=mysql_fetch_array($query))
   
{

 ?>
    <br> <br>       
    <img src="immages/<?php echo$foto["immagine"]?>" class="immages">
   
   
   
<?php
}

// Ricerca e visualizza l'utente che si è connesso con le info

$row = mysql_fetch_array(mysql_query("SELECT * FROM utenti WHERE id='".$_SESSION['id']."'"));
echo "<br> <br>";


        echo "Nome e cognome: ".$row['cognome'] . " ".$row['nome'];
       
        echo "<br>";
        echo "Username: ". $row['username'];
        echo "<br>";
        echo "EMail: ".$row['email'];
       
 ?>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
 <center> <br> <br>

<input type="button" onClick="window.location.href='upload.php';" style='padding:10px' value="Upload" />
<input type="button" onClick="window.location.href='modifica.php';" style='padding:10px' value="Modifica" />
<input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
 </center>
    </body>
</html>

E' un vecchissimo codice ancora con il vecchio metodo msql. vedi se riesci a togliere sta protezione magari te ci riesci. Grazie.
 
Ho dato un'occhiata e, a quanto vedo, lo script va a cercare la variabile di sessione "nome" e, se non la trova, ti rimanda alla pagina failed.php. La variabile di sessione qui non viene mai settata (desumendo che connetti.php sia il file di connessione al db e che non faccia nient'altro), per cui ogni volta che esegui lo script il risultato sarà sempre quello di essere reindirizzato.

Ho notato che il codice è molto impreciso. Vedo <html> e <body> aperti e chiusi più di una volta e i link ai CSS non inseriti nella <head>, oltre alla session_start() che si ripete due volte.

Il mio consiglio è quello di schiarirti le idee, identificando bene lo scopo della pagina e le funzioni che dovrà implementare. Successivamente dovresti passare alla pulizia, assolutamente necessaria, del codice.
 
Si questo l'avevi scritto sempre in aiuto qualche anno fa e funzionava a dire il vero. Però mi viene un dubbio che domani verificherà. Connetti.php mi viene il sospetto che sia solo l'indirizzo ip del mio nas a roma e non quello di anzio allora si spiegherebbe il motivo per cui no riesco ad entrare. Cioè perché manca l'indirizzo ip di anzio (mare) non so se mi sono spiegato cosa intendo.
 
No, direi che non ho capito.

Non vedo connessioni al database nel codice che hai postato, per cui ho desunto che quest'ultima si trovasse nel file connetti.php. Se così non fosse le query fallirebbero una dopo l'altra.
 
Dunque connessione.php contiene tutti i dati necessari per connettersi al db
purtroppo non ricordo se c'era anche l'indirizzo ip si anzio (mare del nas). Ovviamente presumo da quello che mi hsi detto che se non fosse previsto le query darebbero errore ho capito male ????
 

Discussioni simili