Warning: session_start() [function.session-start]: Cannot send session cache limiter

hobby

Nuovo Utente
22 Dic 2009
5
0
0
Ciao a tutti. Chiedo l'aiuto.

Ho un problema che non riesco a risolvere da almeno 2gg.

Quando carico la pagina php protetta da

<? include("check.php"); ?>

mi appare un errore:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /..../home.php:1) in /...../check.php on line 2

Il sistema di iscrizione e conferma funziona perfettamente, invece effettuando il login appare l'errore.

Il codice file check.php:

<?
session_start(); //dice che è questo errore

// controlliamo se è stata inizializzata la sessione
if(isset($_SESSION['userid']))
{
//controllo id con esito positivo
echo "<a href=logout.php>Logout</a>";
}else{
//controllo sessione con esito negativo
@header("Location: form_login.php");
}
?>


Il codice di login ho utilizzato simile a quello della conferma di registrazione:

<?
session_start();

// controllo sul parametro d'invio
if( isset($_POST['submit']) && (trim($_POST['submit']) == "login") )
{
// controllo sul formato dell'email
if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
{
echo "Attenzione: \nil formato dell'email risulta scorretto.";
}
// controllo sul formato della password
elseif((!isset($_POST['password'])) || ($_POST['password'] == "") || (!preg_match("/^[a-z0-9]+$/i", $_POST['password'])))
{
echo "Attenzione: \nla password inserita risulta scorretta.";
}else{
// se i parametri sono in formato corretto interroghiamo il database
$email = $_POST['email'];
$password = $_POST['password'];

// includiamo il file di configurazione
@include "config.php";

// controlliamo se i parametri sono presenti in tabella
$ctrl_login = @mysql_query("SELECT userid FROM login WHERE email='$email' AND password='$password'") or die (mysql_error());
if(@mysql_num_rows($ctrl_login)==0)
{
// esito login negativo
echo "Login errato.";
}else{

// creiamo un id di sessione corrispondente all'utente
$_SESSION['userid'] = $obj->userid;

// redirect alla pagina degli iscritti
@header("Location: home.php");
}
}
}else{
// form per la conferma
?>

<form align="center" name="login" method="post" action="<? $_SERVER['PHP_SELF']; ?>">
<input placeholder="email" size="20" type="Text" name="email">
<input placeholder="password" type="password" id="password" size="20" name="password">
<b>Ricordami </b><input type="checkbox" name="ricordami[]" value="ON" class="check">
<input type="reset" value="resetta" class="button">
<input type="submit" value="login" name="submit" id="submit" class="button">
</form>
Se non sei registrato <a href="form_iscrizione.php">clicca qui</a>

<?
}
?>


Qualcuno ha una soluzione?


Ringrazio per l'attenzione riservatami.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
808
16
18
59
Udine
www.stilisticamente.com
Quell'errore compare perché come dice lui medesimo: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /..../home.php:1) in /...../check.php on line 2 hai già inviato gli header alla riga 1 del file chiamato index.php.
E infatti non puoi caricare un file in una pagina che inizia con session_start(), il file incluso è a tutti gli effetti la continuazione del primo file, quello che lo include.
Se fai così in pratica è come se richiamassi la sessione due volte, la prima quando apri il file index.php ad esempio e la seconda quando includi check.php.
La soluzione al tuo problema è di togliere il richiamo alle sessioni dai file che includi, e lasciarle solo nei file che richiami dall'url.
 

hobby

Nuovo Utente
22 Dic 2009
5
0
0
Intanto ti ringrazio per l'indicazione. :fonzie: Dato che ho provato a modificare qualcosa ma non ho il risultato che vorrei. Potresti scrivermi la soluzione in codice?

Per proteggere le pagine devo utilizzare necessariamente:

<? include("check.php"); ?> tranne index.html

Ipotizzando l'assenza del file check.php:

nella home.php e altre pagine il codice da scrivere sarebbe:

<?
session_start();

// controlliamo se è stata inizializzata la sessione
if(isset($_SESSION['userid']))
{
//controllo id con esito positivo
echo "<a href=logout.php>Logout</a>";
}else{
//controllo sessione con esito negativo
@header("Location: form_login.php");
}
?>

Utilizzando questa modalità, la pagina non è protetta è non viene effettuato il trasferimento alla form_login.php . :confused:
 

hobby

Nuovo Utente
22 Dic 2009
5
0
0
Rinnovo il ringraziamento.

Ho effettuato le modifiche da te suggerite e ho il risultato:
le pagine non hanno nel caso positivo echo (Logout);
le pagine non risultano protette (riesco ad accedere con un semplice copia incolla dell'url e non c'è il redirect a form_login.php)
Insomma, credo che include() non interagisca con check.php
Forese il problema è nelle variabili della sessione?
Oppure l'incompatibilità con la pagina index.html?

Forse serve qualche altro script di connesione al database MySQL?:confused:

Saluti.:byebye:
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
difficile che MySQL centri qualcosa con un problema di reindirizzamento, comunque togli tutti quegli operatori di silence ("@") e vedi se ti restituisce qualche errore
 

hobby

Nuovo Utente
22 Dic 2009
5
0
0
Ringrazio Eliox per il suggerimento.

Ho provato ad applicare il tuo suggerimento, tuttavia togliendo @ da check.php mi da l'errore nella riga di header.
Attualmente non ci sono errori ma la protezione delle pagine è assente, cosa che è fondamentale.

Cordiali saluti.:byebye:
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
controlla quanti session_start() vengono eseguiti e dove tra tutte le pagine che vengono incluse
 

hobby

Nuovo Utente
22 Dic 2009
5
0
0
Grazie a tutti voi.
Ho trovato la soluzione che consisteva nella modifica del codice.
Ho aggiunto il riferimento mancante alla riga
$_SESSION['userid'] = $obj->userid;

Cordiali Saluti. :byebye:
 
Discussioni simili
Autore Titolo Forum Risposte Data
G [PHP] Problema - Warning: session_start() [function.session-start] PHP 9
M Warning: session_start(): Cannot send session cache... ???? PHP 5
F [MySQL] Warning 1265 data truncated for column... MySQL 5
B Warning: mysql_connect(): Access denied for user 'DIREZIONE'@'81.88.55.179' (using password: YES) PHP 6
G [PHP] Warning: Cannot modify header information - headers already sent by PHP 3
G Warning: mysql_num_rows() che problema è? PHP 3
P Warning: mysqli_query() expects parameter 1 to be mysqli PHP 2
C ERRORE: Warning: move_uploaded_file()... come risolverlo? PHP 1
JackIlPazzo Warning: Invalid argument supplied for foreach() PHP 1
N warning su sessione PHP 2
F Warning: Invalid argument supplied for foreach() PHP 3
A Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given PHP 17
L Problema messaggio d'errore -Warning: mysqli_num_rows() expects parameter 1 to be mysqli_ etc etc... PHP 2
pup3770 Su Mac funziona - su windows da warning PHP 9
E Warning: session_start() PHP 1
P Warning: mysql_num_rows() expects parameter 1 to be resource, array given in PHP 9
A Warning: mysql_result() expects parameter 1 to be resource, boolean given MySQL 2
I Warning: Division by zero in Joomla 0
S Help : Warning: mail() [function.mail] PHP 2
H Warning: Cannot modify header information... PHP 6
P Warning email() PHP 116
catellostefano CLASSE PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource PHP 2
Frank10 Problema w3c warning HTML5 -.-" HTML e CSS 5
neo996sps Warning su redirect della pagina PHP 9
M Warning: mysql_query() expects parameter 2 to be resource, boolean given PHP 3
S Warning sulle sessioni, come fare? PHP 1
catellostefano Problema per richiamare file xml -- Warning: DOMDocument::load() [domdocument.load]: PHP 0
L Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in .... PHP 2
L Warning: Cannot modify header information - headers already sent by... PHP 9
S errore warning mysql_ferch_array() e mysql_free_result() PHP 5
A Warning strano PHP 2
JellyBelly Warning Uso Rename PHP 2
W Warning: main(./WEB-INF/etc/config.php): PHP 3
M Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in PHP 6
M Warning: Cannot modify header information - headers already sent by (output started a PHP 1
C problema con un warning PHP 0
L login e session PHP 4
max1974 Session Timeout Javascript 0
L [PHP] login e protezione pagine con session PHP 3
P [PHP] Multi-session PHP 1
Y [PHP] The session is lost PHP 8
L [WordPress] creare un plugin , come faccio ad utilizzare le session. WordPress 5
M [Java] Session Attribute Spring MVC Java 1
M [PHP] ID in SESSION PHP 1
P Session e cookie funzionano solo dopo passaggio valori tramite POST PHP 8
W Session e htaccess PHP 2
M Non aggiorna valore session PHP 5
Nik Cannot send session cache limiter - ERRORE utilizzando session_start(); PHP 3
I registrazione (SESSION) PHP 5
K problemi con nome della session PHP 3

Discussioni simili