История изменений
Исправление Bad_ptr, (текущая версия) :
Ну короче чего, вот есть у тебя база данных, там есть таблица users, там есть поля id,user_name,pass_hash. Id — автоинкрементное поле, user_name — имя пользователя берётся во время регистрации, pass_hash — md5 хэш от пароля, указанного при регистрации.
В этой таблице обычно с id 0 идёт админ, с id 1 допустим anonymous.(т.е. первые две записи сразу создаёшь сам).
Будем хранить инфу о логине в $_SESSION.
Теперь процедура логина: Функция возвращает true если пользователь уже залогинился и false, если нет.
function islogined()
{
return (isset( $_SESSION[ 'logined' ] ) && $_SESSION['logined'] == true);
}
Теперь функция, с помощью которой будем пытаться логиниться: //с ламерским mysql_*
function try_to_login( )
{
//Функция может быть пущена либо без аргументов для логина уже залогиненого пользователя,
//т.е. каждый раз вначале скрипта, нужно её запускать.
//либо с парой логин/пароль чтобы влогинить пользователя, когда он ввёл данные и нажал кнопку login.
if (islogined() == true) {
return true;
}
//пользователь по умолчанию считается аноном
$_SESSION['login'] = 'anonymous';
$_SESSION['user_id'] = 1;
global $dbconnection; //это типа инфа для подключения к базе данных
$num_arg = func_num_args();
$login = '';
$passhash = '';
if ( $num_arg == 0 ) {
// функция запущена без аргументов, проверяем, может пользователь уже логинился недавно
if( isset($_COOKIE['login']) && isset($_COOKIE['passhash'] ) )
{// сначала проверим в куках
$login = $_COOKIE[ 'login' ];
$passhash = $_COOKIE[ 'passhash' ];
}
elseif (isset($_SESSION['login']) && isset($_SESSION['passhash'] ))
{//но куки не всегда разрешены
$login = $_SESSION[ 'login' ];
$passhash = $_SESSION[ 'passhash' ];
}
else
{
return false;
}
} // Функция запущена с двумя аргументами с логином и паролем
elseif ( $num_arg == 2 )
{
$login = func_get_arg(0);
$passhash = md5(func_get_arg(1));
}
else
{
return false;
}
$l = mysql_real_escape_string($login);
$p = mysql_real_escape_string($passhash);
$loginquery = "SELECT `id` FROM `users` WHERE `user_name`='{$l}' AND `pass_hash`='{$p}' LIMIT 1";
$sql = mysql_query( $loginquery, $dbconnection ) or die( mysql_error($dbconnection) );
if( mysql_num_rows($sql) == 1 )
{
$user = mysql_fetch_assoc($sql);
$_SESSION[ 'user_id' ] = $user[ 'id' ];
$_SESSION[ 'login' ] = $l;
$_SESSION[ 'passhash' ] = $p;
setCookie( 'login', $l, strtotime('+1 week'), '/');
setCookie( 'passhash', $p, strtotime('+1 week'), '/');
$_SESSION['logined'] = true;
return true;
}
return false;
}
ну и функция вылогинивания:
function logout(){
session_unset();
setCookie('login', '', time() - 3600, '/');
setCookie('passhash', '', time() - 3600, '/');
Redirect("$_SERVER[HTTP_REFERER]");exit;
}
Теперь есть скрипт в котором if (!islogined()) { print_login_form(); } else { print_greetings(); } Теперь где-то есть форма, в которой 2 поля с name='login' и name='password' и action = /login.php type='post' и input button type='submit'
И в этом login.php вызываешь функцию try_to_login($_POST['login'], $_POST['password']); header(«Location: $_SERVER[HTTP_REFERER]»); exit;
Исправление Bad_ptr, :
Ну короче чего, вот есть у тебя база данных, там есть таблица users, там есть поля id,user_name,pass_hash. Id — автоинкрементное поле, user_name — имя пользователя берётся во время регистрации, pass_hash — md5 хэш от пароля, указанного при регистрации.
В этой таблице обычно с id 0 идёт админ, с id 1 допустим anonymous.(т.е. первые две записи сразу создаёшь сам).
Будем хранить инфу о логине в $_SESSION.
Теперь процедура логина: Функция возвращает true если пользователь уже залогинился и false, если нет.
function islogined()
{
return (isset( $_SESSION[ 'logined' ] ) && $_SESSION['logined'] == true);
}
Теперь функция, с помощью которой будем пытаться логиниться: //с ламерским mysql_*
function try_to_login( )
{
//Функция может быть пущена либо без аргументов для логина уже залогиненого пользователя,
//т.е. каждый раз вначале скрипта, нужно её запускать.
//либо с парой логин/пароль чтобы влогинить пользователя, когда он ввёл данные и нажал кнопку login.
if (islogined() == true) {
return true;
}
//пользователь по умолчанию считается аноном
$_SESSION['login'] = 'anonymous';
$_SESSION['user_id'] = 1;
global $dbconnection; //это типа инфа для подключения к базе данных
$num_arg = func_num_args();
$login = '';
$passhash = '';
if ( $num_arg == 0 ) {
// функция запущена без аргументов, проверяем, может пользователь уже логинился недавно
if( isset($_COOKIE['login']) && isset($_COOKIE['passhash'] ) )
{// сначала проверим в куках
$login = $_COOKIE[ 'login' ];
$passhash = $_COOKIE[ 'passhash' ];
}
elseif (isset($_SESSION['login']) && isset($_SESSION['passhash'] ))
{//но куки не всегда разрешены
$login = $_SESSION[ 'login' ];
$passhash = $_SESSION[ 'passhash' ];
}
else
{
return false;
}
} // Функция запущена с двумя аргументами с логином и паролем
elseif ( $num_arg == 2 )
{
$login = func_get_arg(0);
$passhash = md5(func_get_arg(1));
}
else
{
return false;
}
$l = mysql_real_escape_string($login);
$p = mysql_real_escape_string($passhash);
$loginquery = "SELECT `id` FROM `users` WHERE `user_name`='{$l}' AND `pass_hash`='{$p}' LIMIT 1";
$sql = mysql_query( $loginquery, $dbconnection ) or die( mysql_error($dbconnection) );
if( mysql_num_rows($sql) == 1 )
{
$user = mysql_fetch_assoc($sql);
$_SESSION[ 'user_id' ] = $user[ 'id' ];
$_SESSION[ 'login' ] = $l;
$_SESSION[ 'passhash' ] = $p;
setCookie( 'login', $l, strtotime('+1 week'), '/');
setCookie( 'passhash', $p, strtotime('+1 week'), '/');
$_SESSION['logined'] = true;
return true;
}
return false;
}
Теперь есть скрипт в котором if (!islogined()) { print_login_form(); } else { print_greetings(); } Теперь где-то есть форма, в которой 2 поля с name='login' и name='password' и action = /login.php type='post' и input button type='submit'
И в этом login.php вызываешь функцию try_to_login($_POST['login'], $_POST['password']); header(«Location: $_SERVER[HTTP_REFERER]»); exit;
Исходная версия Bad_ptr, :
Вот так: http://username:password@hostname/ ))
Ну короче чего, вот есть у тебя база данных, там есть таблица users, там есть поля id,user_name,pass_hash. Id — автоинкрементное поле, user_name — имя пользователя берётся во время регистрации, pass_hash — md5 хэш от пароля, указанного при регистрации.
В этой таблице обычно с id 0 идёт админ, с id 1 допустим anonymous.(т.е. первые две записи сразу создаёшь сам).
Будем хранить инфу о логине в $_SESSION.
Теперь процедура логина: Функция возвращает true если пользователь уже залогинился и false, если нет.
function islogined()
{
return (isset( $_SESSION[ 'logined' ] ) && $_SESSION['logined'] == true);
}
Теперь функция, с помощью которой будем пытаться логиниться: //с ламерским mysql_*
function try_to_login( )
{
//Функция может быть пущена либо без аргументов для логина уже залогиненого пользователя,
//т.е. каждый раз вначале скрипта, нужно её запускать.
//либо с парой логин/пароль чтобы влогинить пользователя, когда он ввёл данные и нажал кнопку login.
if (islogined() == true) {
return true;
}
//пользователь по умолчанию считается аноном
$_SESSION['login'] = 'anonymous';
$_SESSION['user_id'] = 1;
global $dbconnection; //это типа инфа для подключения к базе данных
$num_arg = func_num_args();
$login = '';
$passhash = '';
if ( $na == 0 ) {
// функция запущена без аргументов, проверяем, может пользователь уже логинился недавно
if( isset($_COOKIE['login']) && isset($_COOKIE['passhash'] ) )
{// сначала проверим в куках
$login = $_COOKIE[ 'login' ];
$passhash = $_COOKIE[ 'passhash' ];
}
elseif (isset($_SESSION['login']) && isset($_SESSION['passhash'] ))
{//но куки не всегда разрешены
$login = $_SESSION[ 'login' ];
$passhash = $_SESSION[ 'passhash' ];
}
else
{
return false;
}
} // Функция запущена с двумя аргументами с логином и паролем
elseif ( $na == 2 )
{
$login = func_get_arg(0);
$passhash = md5(func_get_arg(1));
}
else
{
return false;
}
$l = mysql_real_escape_string($login);
$p = mysql_real_escape_string($passhash);
$loginquery = "SELECT `id` FROM `users` WHERE `user_name`='{$l}' AND `pass_hash`='{$p}' LIMIT 1";
$sql = mysql_query( $loginquery, $dbconnection ) or die( mysql_error($dbconnection) );
if( mysql_num_rows($sql) == 1 )
{
$user = mysql_fetch_assoc($sql);
$_SESSION[ 'user_id' ] = $user[ 'id' ];
$_SESSION[ 'login' ] = $l;
$_SESSION[ 'passhash' ] = $p;
setCookie( 'login', $l, strtotime('+1 week'), '/');
setCookie( 'passhash', $p, strtotime('+1 week'), '/');
$_SESSION['logined'] = true;
return true;
}
return false;
}
Теперь есть скрипт в котором if (!islogined()) { print_login_form(); } else { print_greetings(); } Теперь где-то есть форма, в которой 2 поля с name='login' и name='password' и action = /login.php type='post' и input button type='submit'
И в этом login.php вызываешь функцию try_to_login($_POST['login'], $_POST['password']); header(«Location: $_SERVER[HTTP_REFERER]»); exit;