na początku też właśnie tak myślałem, ale ale dawalem nawet pełną akceptacje cookie i nic.
@kossa nie wiem, ale wydaje mi się, że jakbym coś sknocił to na FF czy operze też by nie działało, chyba, ze się mylę ?
moge dać kod ale popołudniu jak wrócę z pracy
mam takie pliki:
request.php
<?php
class httpRequest
{
private $ip;
private $browser;
public function __construct()
{
$this -> ip = $this->ip();
$this -> browser = $_SERVER['HTTP_USER_AGENT'];
} // end __construct();
public function getIp()
{
return $this -> ip;
} // end getIp();
public function getBrowser()
{
return $this -> browser;
} // end getBrowser();
public function ip()
{
if($_SERVER['HTTP_X_FORWARDED_FOR'])
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
}
?>
user.php
<?php
class user
{
private $id;
private $login;
private $password;
private $name;
private $lastname;
private $construct;
public function __construct($anonymous = true, $id = 0, $login = '', $password = '', $name = '', $lastname = '')
{
if($anonymous == true)
{
$this->id = 0;
$this->login = '';
$this->password = '';
$this->name = '';
$this->lastname = '';
}
else
{
$this->id = $id;
$this->login = $login;
$this->password = $password;
$this->name = $name;
$this->lastname = $lastname;
}
$this -> construct = true;
} // end __construct();
public function isAnonymous()
{
return ($this->id == 0 ? true : false);
} // end isAnonymous();
public function getId()
{
return $this->id;
} // end getId();
public function getLogin()
{
return $this->login;
} // end getLogin();
public function getPassword()
{
return $this->password;
} // end getPassword();
public function getName()
{
return $this->name;
} // end getName();
public function getLastname()
{
return $this->lastname;
} // end getLastname();
public function __set($name, $value)
{
if(!$this->construct)
{
$this->$name = $value;
}
} // end __set();
static public function checkPassword
($login, $password) {
$password = sha1($password);
$stmt = $db->query('SELECT user_id AS `id`,
user_mail AS `login`, user_pass AS `password`,
user_name AS `name`, user_lastname AS `lastname`
FROM users
WHERE user_mail = "' .$login. '" AND
user_pass = "' .$password. '"');
if($db->num_rows())
{
// Jezeli uzytkownik o takim loginie i hasle
// istnieje, zwroc jego rekord w postaci obiektu
$array = $db->fetch_row();
$user = new user(false, $array['id'], $array['login'], $array['password'], $array['name'], $array['lastname']);
return $user;
}
else
{
// Bledy w loginie/hasle zglaszamy zerem
return 0;
}
} // end checkPassword();
}
?>
session.php
<?php
define('COOKIE_NAME', 'bigtestsesssji'); // losowe define('COOKIE_EXPIRE', 3600
); // 1 godzina
class session
{
private $id;
private $ip;
private $browser;
private $time;
private $username;
private $user;
public function __construct()
{
// Kontrola poprawnosci ciastka
if(!isset($_COOKIE[COOKIE_NAME
])) {
$_COOKIE[COOKIE_NAME] = '';
}
if(strlen($_COOKIE[COOKIE_NAME
]) != 40
) {
$this->create();
}
// Wyslanie zapytania o sesje. Od razu sprawdzamy
// jej waznosc oraz zgodnosc IP i przegladarki
$time = time() - COOKIE_EXPIRE
;
$stmt = $db->query('SELECT session_user, session_ip,
session_browser, session_time, session_username
FROM sesion
WHERE session_id = "' .$_COOKIE[COOKIE_NAME]. '" AND
session_ip = "' .$request -> getIp(). '" AND
session_browser = "' .$request -> getBrowser(). '" AND
session_time > "' .$time. '"');
if($db->num_rows())
{
$session = $db->fetch_row();
$this->id = $_COOKIE[COOKIE_NAME];
$this->ip = $session['session_ip'];
$this->browser = $session['session_browser'];
$this->time = $session['session_time'];
$this->username = $session['session_username'];
$stmt = $db->query('UPDATE sesion SET
session_time = "' .time(). '" WHERE session_id = "' .$_COOKIE[COOKIE_NAME]. '"');
if($session['session_user'] == 0)
{
// sesja anonimowa
$this->user = new user(true);
}
else
{
// sesja zalogowanego
$stmt = $db->query('SELECT user_id AS `id`,
user_mail AS `login`, user_pass AS `password`,
user_name AS `name`, user_lastname AS `lastname`
FROM users
WHERE user_id="' .$session['session_user']. '"');
if($db->num_rows())
{
$array = $db->fetch_row();
$this->user = new user(false, $array['id'], $array['login'], $array['password'], $array['name'], $array['lastname']);
}
else
{
$this->create();
}
}
}
else
{
$this->create();
}
} // end __construct();
private function create()
{
$this->garbageCollector();
// utworz nowa anonimowa sesje. Wczesniej usun stare z bazy
$this->id = sha1
(uniqid(time().$request->getIp()));
$stmt = $db->query('INSERT INTO sesion (session_id,
session_user, session_time, session_browser,
session_ip, session_username)
VALUES("' .$this->id. '", 0, "' .time(). '", "' .$request->getBrowser(). '", "' .$request->getIp(). '", "Gość")');
$this->user = new user(true);
} // end create();
public function update(user $user)
{
if($user->isAnonymous())
{
if($this->user->isAnonymous())
{
throw new Exception('Próba przerejestrowania anonimowego użytkownika!');
}
}
// Zmiana ID sesji oraz przypisanie do niej usera
$username = $user->getName() ." " .$user->getLastname();
$stmt = $db->query('UPDATE sesion SET
session_id = "' .$newId. '", session_user = "' .$user->getId(). '",
session_username = "' .$username. '"
WHERE session_id = "' .$this->id. '"');
$this->id = $newId;
$this->user = $user;
} // end update();
private function garbageCollector()
{
$db->query('DELETE FROM support_sesion_users WHERE
session_time < '.(time() - COOKIE_EXPIRE
)); } // end garbageCollector();
public function getUser()
{
return $this->user;
} // end getUser();
}
?>
a po utworzeniu instancji klasy session i request w ten sposób sprawdzam czy zalogowany użytkownik:
<?php
if($session->getUser()->isAnonymous())
{
header('Location: login.php'); }
else
{
echo '<p>Witaj, '.$session->getUser()->getName().' '.$session->getUser()->getLastname().' ! (<a href="login.php">Wyloguj się</a>)</p>';
}
?>
przepraszam, że pisze post pod postem, ale czy ktoś może mi pomóc w rozwiązaniu tego problemu, gdyż jest to bardzo denerwujący fakt i wielka przeszkoda w produkcie