Buonasera,
ho un sito con oltre 6000 membri in sole 2 settimane ma ho un problema enorme riguardante il login all'account personale e quindi la memorizzazione del cookie.
Premetto che lo script non l'ho compilato io, visto che non ne sarei capace (soprattutto per le parti tecniche come queste).
Allora, veniamo al problema.
Praticamente gli utenti, quando effettuano il login con il loro indirizzo e-mail e password accedono regolarmente al loro account senza problemi.
Poi il sito è diviso in varie sezioni visibili solo a chi ha effettuato l'accesso al proprio account.
Alcuni membri(non tutti, visto che io il problema non lo riscontro neanche) dicono che appena cliccono su una delle sezioni "hidden" riportano l'errore del logout("per visualizzare questa pagina devi essere loggato").
Quindi è come se quando accedono al loro account non viene memorizzato il cookie(credo...boh).
Adesso vi posto lo script relativo al login.
poi in un altro file abbiamo:<?
$GLOBALS["login"] = "yes";
$tml->RegisterVar("TITLE", _LANG_MEMBERS_TITLE);
if($user->IsLoggedIn())
{
if($_GET["action"] == "logout")
{
$user->Logoff();
header("Location: " . _SITE_URL . "/index.php?sid=" . $session->ID);
}
else
{
$tml->loadFromFile("pages/header");
$tml->Parse();
$tml->RegisterVar("FNAME", $user->Get("fname"));
$tml->RegisterVar("SNAME", $user->Get("sname"));
$tml->RegisterVar("EMAIL", $user->Get("email"));
$tml->loadFromFile("pages/members2");
$tml->Parse();
$tml->loadFromFile("pages/footer");
$tml->Parse();
$tml->Output();
}
}
elseif($_SERVER["REQUEST_METHOD"] == "POST")
{
if($_POST["action"] == "login")
{
if(!$_POST["email"] || !$_POST["password"])
exit($error->Report(_LANG_MEMBERS_TITLE, _LANG_ERROR_FIELDEMPTY));
elseif(!$user->IsEmail($_POST["email"]))
exit($error->Report(_LANG_MEMBERS_TITLE, _LANG_MEMBERS_BADUSERNAME));
elseif(!$user->IsPassword($_POST["email"], $_POST["password"]))
exit($error->Report(_LANG_MEMBERS_TITLE, _LANG_MEMBERS_BADPASSWORD));
elseif(!$user->IsActive($_POST["email"]))
exit($error->Report(_LANG_MEMBERS_TITLE, _LANG_MEMBERS_NOTACTIVATED));
$user->Login($_POST["email"], $_POST["password"], $_POST["public"] == "on" ? 2 : 1);
header("Location: " . _SITE_URL . "/members.php?sid=" . $session->ID);
}
$tml->loadFromFile("pages/header");
$tml->Parse();
$tml->RegisterVar("EMAIL", $_POST["email"]);
$tml->RegisterVar("PASSWORD", $_POST["password"]);
$tml->loadFromFile("pages/footer");
$tml->Parse();
$tml->Output();
}
}
else
$error->Fatal(_LANG_MEMBERS_TITLE, _LANG_ERROR_ERROROCCURED);
}
else
{
$tml->loadFromFile("pages/header");
$tml->Parse();
$tml->loadFromFile("pages/members1");
$tml->Parse();
$tml->loadFromFile("pages/footer");
$tml->Parse();
$tml->Output();
}
?>
Ecco questi sono i due file che eseguono il login e la memorizzazione del cookie,id sessione etc. etc.<?
class User
{
var $data = Array();
function User($ID = "")
{
if($ID)
$this->LoadByID($ID);
else
$this->LoadFromCookie();
}
function LoadByID($ID)
{
GLOBAL $db;
if($ID)
{
$db->Query("UPDATE users SET lastactive='" . time() . "', sentmail='no' WHERE id='$ID'");
$db->Query("SELECT * FROM users WHERE id='$ID'");
$this->data = $db->NextRow();
}
}
function GetCheckString($ID)
{
return md5("sTr1nG" . $ID . _DB_PASS . ($ID+328));
}
function LoadFromCookie()
{
GLOBAL $session;
if($this->IsLoggedIn())
{
$this->LoadByID($_COOKIE["uid"] >= 1 ? $_COOKIE["uid"] : $session->Get("uid"));
}
}
function IsEmail($email)
{
$GLOBALS["db"]->Query("SELECT id FROM users WHERE email='" . addslashes($email) . "'");
return $GLOBALS["db"]->NumRows() == 0 ? false : true;
}
function IsPassword($email, $password)
{
$GLOBALS["db"]->Query("SELECT id FROM users WHERE email='" . addslashes($email) . "' AND password='" . addslashes($password) . "'");
return $GLOBALS["db"]->NumRows() == 1 ? true : false;
}
function IsLoggedIn()
{
GLOBAL $session;
$remote_addr = $_COOKIE["rad"] != "" ? $_COOKIE["rad"] : $session->Get("rad");
$checkString = $_COOKIE["chk"] != "" ? $_COOKIE["chk"] : $session->Get("chk");
$UID = $_COOKIE["uid"] >= 1 ? $_COOKIE["uid"] : $session->Get("uid");
return ($checkString == $this->GetCheckString($UID) && $remote_addr == $_SERVER["REMOTE_ADDR"]);
}
function Login($email, $password, $mode = 1)
{
GLOBAL $db, $session;
$UID = $db->Fetch("SELECT id FROM users WHERE email='" . addslashes($email) . "' AND password='" . addslashes($password) . "'");
$db->Query("UPDATE users SET lastlogin='" . time() . "' WHERE id='$UID'");
$db->Query("UPDATE users SET sessions=sessions+'1' WHERE id='$UID'");
$db->Query("REPLACE INTO login_logs SET uid='$UID', browser='" . trim($_SERVER["HTTP_USER_AGENT"]) . "', remote_addr='" . $_SERVER["REMOTE_ADDR"] . "', dateStamp='" . time() . "'");
$expire = $mode == 1 ? time() + _MEMBER_LOGINCOOKIE : 0;
setcookie("rad", $_SERVER["REMOTE_ADDR"], $expire);
setcookie("chk", $this->GetCheckString($UID), $expire);
setcookie("uid", $UID, $expire);
$session->Set("rad", $_SERVER["REMOTE_ADDR"]);
$session->Set("chk", $this->GetCheckString($UID));
$session->Set("uid", $UID);
$session->Save();
return $UID >= 1;
}
function Logoff()
{
GLOBAL $session;
setcookie("rad", "");
setcookie("chk", "");
setcookie("uid", "");
$session->Set("rad", "");
$session->Set("chk", "");
$session->Set("uid", "");
$session->Save();
}
function IsAdvertiser()
{
return $this->Get("advertiser") == "yes" ? true : false;
}
function IsActive($email)
{
$active = $GLOBALS["db"]->Fetch("SELECT active FROM users WHERE email='" . addslashes($email) . "'");
return $active == "yes" ? true : false;
}
}
$user = new User;
?>
Lo strano è che io non ho mai ricevuto questo errore(sono l'admin), mentre paino paino ogni giorni ricevo qualche decina di e-mail di utenti che invece riscontrano il problema del logout appena cliccano una delle sezioni riservati ai registrati.
All'inizio pensavo fosse un problema loro(magari il loro browser era impostato male) ma fino ad oggi conto decine e decine di questi membri che non riescono a navigare il mio sito.
Io li capisco, e quindi vorrei assolutamente risolvere questo problemone
Sapreste darmi una mano o su quale parte dello script concentrare la mia mente?
Grazie Tante