Для того, чтобы мои пользователи вошли в систему, у меня есть что-то вроде этого:Проверьте печенье установлен
- пользователь входит в
Если это нормально, я создаю $ _SESSION и установить печенье:
setcookie ('test', sha1 ($ _ POST ['username']), time() + 604800);
Затем я вставляю в таблицу файлов cookie: хэшированное имя пользователя, IP-адрес и версию браузера.
Но для того, чтобы проверить, если пользователь вошел в систему (и держать его запротоколированы), у меня есть запрос по КАЖДЫЙ страницы:
- я проверяю, если $ _SESSION ['ID'] существует (в основном, с этой переменной входит пользователь)
- Если он существует, ничего не происходит.
- Если это не так, я проверяю, если $ _COOKIE [ «печенье»] существует
- Если это произойдет, я получаю пользователь IP-адрес и версию браузера
- С SELECT, запросом, я проверяю, если фактический IP адрес и браузер - это то же самое, что и в таблице.
- Если это то же самое, я сбросить $ _SESSION (так что он вошел в)
Теперь, вот код:
ФОРМА:
<form method="post" action="http://localhost/test/login.php">
<label for="user">Username :</label>
<input type="text" name="username" id="user" maxlength="20" placeholder="Username">
<label for="pass">Password :</label>
<input type="password" name="password" id="pass" placeholder="Password">
<br>
<input type="checkbox" name="cookie" value="cookie">Remember me ?
<input type="submit" name="login" value="ok">
</form>
ФУНКЦИИ:
function get_ip() {
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
}
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else {
return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
}
}
function getBrowser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
}
$i = count($matches['browser']);
if ($i != 1) {
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
ON ВВЕСТИ:
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
$salt = "salt_test";
$req = $bdd->prepare('SELECT * FROM users WHERE username = :username AND pass = :pass');
$req->execute(array('username' => $_POST['username'], 'pass' => md5(sha1($_POST['pass'].$salt))));
if ($data = $req->fetch())
{
if ($data['stat'] != 0)
{
$_SESSION['ID'] = $data['ID'];
$_SESSION['username'] = $data['username'];
$_SESSION['stat'] = $data['stat'];
$req = $bdd->prepare('UPDATE cookies SET last_co = CURRENT_TIMESTAMP WHERE ID_user = :ID');
$req->execute(array('ID' => $data['ID']));
$req->closeCursor();
if(!empty($_POST['cookie']))
{
setcookie ('cookie', md5($_POST['username']), time()+604800);
$ua = getBrowser();
$yourbrowser= $ua['name']. " " .$ua['version'];
$req = $bdd->prepare('UPDATE cookies SET hash_username = :hash_username, IP = :IP, browser = :browser WHERE ID_user = :ID');
$req->execute(array('hash_username' => md5($_SESSION['pseudo']), 'IP' => get_ip(), 'browser' => $yourbrowser, 'ID' => $_SESSION['ID']));
$req->closeCursor();
}
?><META HTTP-EQUIV="Refresh" CONTENT="0.1; URL=http://localhost/test/" /><?php
}
elseif ($data['stat'] == 5)
{
$error = 2;
}
}
else
{
$error = 1;
}
$req->closeCursor();
}
НА ЧЛЕН СТРАНИЦЫ:
if (isset($_SESSION['ID']))
{
if (isset($_COOKIE['cookie'])
{
$ip = get_ip();
$yourbrowser= $ua['name']. " " .$ua['version'];
$req = $bdd->prepare('SELECT * FROM cookies WHERE hash_username = :hash, IP = :IP, browser = :browser');
$req->execute(array('hash_username' => md5($_SESSION['username']), 'IP' => $ip, 'browser' => $yourbrowser));
if ($req->fetch())
{
$_SESSION['ID'] = $data['ID'];
$_SESSION['username'] = $data['username'];
$_SESSION['stat'] = $data['stat'];
}
$req->closeCursor();
}
}
Таким образом, этот метод ОК и это тяжело для исполнения. Разве вы не думаете, что «бесполезно» делать запрос каждый раз?
где код? –
Никто не хочет читать 100 строк кода спагетти. 'Проверьте, установлен ли файл cookie' => использовать $ _COOKIE (s. Http://php.net/manual/de/reserved.variables.cookies.php) – Aitch
Один вопрос на вопрос, пожалуйста. – RiggsFolly