Newsgroup: it.comp.www.php
Titolo: Sessioni e area riservata - bug?

Ho questa situazione in un'area riservata:
1 - file login.php:
-----------------------------------------------
// messaggio di errore
<?
$check=$_GET['check'];
if ($check=="1") {
$msg="You must log in to access this area of the site.";
} else if ($check=="2") {
$msg="Your email or password is incorrect.";
}
?>
.....
<?  echo "$msg"; ?>
....
// form di accesso
<form method="post" action="index.php">
<input name="email" type="text" id="email" >
<input name="pwd" type="password"  />
<input name="submit" type="submit" value="Log in" />
------------------------------------------------------------
2 - file index.php :
// include il sistema di accesso
<?php include '../accesscontrol.php'; ?>
...
// link alle altre pagine
<a href="seconda.php">Vai alla seconda</a><br />
<a href="seconda.php">Vai alla terza</a>
...
------------------------------------------------------------
3 - file seconda.php:
// include il sistema di accesso
<?php include '../accesscontrol.php'; ?>
...
---------------------------------------------------
4 - file accesscontrol.php:
// info sul db, imposta la sessione e controlla se i dati di accesso sono
gia' stati inviati
<?php
include_once '../db.php';
session_set_cookie_params(2500);
session_start();
header("Cache-control: private"); // IE 6 Fix.
if (!isset($_POST['submitchanges'])){
$userId = isset($_POST['email']) ? $_POST['email'] : $_SESSION['userid'];
$pwd = isset($_POST['pwd']) ? $_POST['pwd'] : $_SESSION['pwd'];
} else {
$userId =  $_SESSION['userid'];
$pwd =  $_SESSION['pwd'];
}
// se non trova lo $userId da errore 1
if(!isset($userId)) {
  header("Location: login.php?check=1");
  exit;
}
$_SESSION['userid'] = $userId;
$_SESSION['pwd'] = $pwd;
// cerca i dati di accesso nel db
dbConnect();
$sql = "SELECT * FROM utente WHERE
        email = '$userId' AND password = '$pwd'";
$result = mysql_query($sql);
if (!$result) {
  error('A database error occurred while checking your '.
        'login details.\\nIf this error persists, please '.
        'contact pi...@pippo.com.');
}
// se non trova i dati di accesso segna errore 2
if (mysql_num_rows($result) == 0) {
  unset($_SESSION['userid']);
  unset($_SESSION['pwd']);
  header("Location: login.php?check=2");
  exit;
}
?>
---------------------------------------------------
Effettuo il login vado in index.php e va tutto bene per tutti, se clicco un
qualsiasi link e vado in seconda.php, terza.php etc... tutti con la stessa
struttura, a me va tutto ok, ma su alcuni PC, con IE , ritorna a login.php e
da errore $check=="1")
Quale puo' essere il problema???

 
Forse qui (ma ho dato solo un'occhiata moolto sommaria) :
header("Location: login.php?check=2");
header con location ha bisogno di una url assoluta per alcuni client
da 
http://it.php.net/manual/it/function.header.php
Nota:  HTTP/1.1 richiede un URI assoluto come argomento di Location: 
composto da schema, hostname, e path assoluto, ma alcuni clients possono 
accettare anche URIs relativi. E' possibile usare 
$HTTP_SERVER_VARS['HTTP_HOST'], $HTTP_SERVER_VARS['PHP_SELF'] e 
dirname() per creare URI assoluti da URI relativi in modo automatico:
header ("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST']
                        ."/".dirname($HTTP_SERVER_VARS['PHP_SELF'])
                        ."/".$relative_url);
-- 
"20060207: buongiorno italia, buongiorno maria.
con gli occhi pieni di malinconia"

 header("Location: login.php?check=2");
No, tnx.   Il location funge... il problema e' un altro...

 Quale puo' essere il problema???
non ho letto tutto il codice..
sei sicuro che il SID si propaghi?
-- 
www.iuz-lab.info
Home Politics - 
http://www.iuz-lab.info/homepolitics.php

 sei sicuro che il SID si propaghi?
Si...
sulla maggior parte dei clients va senza problemi...