Nawigacja
Pozbywamy się setuser.php
Napisane przez CyberSoft dnia 17 października 2008 11:20 · 9 komentarzy · 6696 czytań · · ·
Streszczenie:
Czy nie denerwuje Cię, że przy każdym logowaniu, wylogowaniu wywoływany jest plik setuser.php, a cała procedura logowania czy wylogowania trwa i trwa. W tym artykule pokaże, jak pozbyć się pliku, a w dodatku wprowadzić trochę nowoczesności do naszego PHP-Fusiona.Na pewno jednym z wielu charakterystycznych cech dla fusiona jest sposób logowania i wylogowywania. Zawsze po takiej operacji zostajesz na moment przekierowany na inną stronę a następnie na kolejną. Ten artykuł powstał po to by pokazać jak pozbyć się tego pliku. Artykuł napisany na podstawie wersji 06.01.15
Krok 1
Tworzymy kopię zapasową następujących plików :
- maincore.php
- setuser.php
- infusion/user_info_panel/user_info_panel.php
Teraz usuwamy cały plik setuser.php, następnie przechodzimy do edycji pliku maincore.php
Odszukujemy linie 162, powinniśmy odnaleźć tam taki kod:
if (isset($_POST['login'])) {
$user_pass = md5($_POST['user_pass']);
$user_name = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", stripinput($_POST['user_name']));
$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_name='$user_name' AND (user_password='".md5($user_pass)."' OR user_password='$user_pass')");
if (dbrows($result) != 0) {
$data = dbarray($result);
if ($data['user_password'] == $user_pass) {
$result = dbquery("UPDATE ".$db_prefix."users SET user_password='".md5($user_pass)."' WHERE user_id='".$data['user_id']."'");
}
$cookie_value = $data['user_id'].".".$user_pass;
if ($data['user_status'] == 0) {
$cookie_exp = isset($_POST['remember_me']) ? time() + 3600*24*30 : time() + 3600*3;
header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
setcookie("fusion_user", $cookie_value, $cookie_exp, "/", "", "0");
redirect(BASEDIR."setuser.php?user=".$data['user_name'], "script");
} elseif ($data['user_status'] == 1) {
redirect(BASEDIR."setuser.php?error=1", "script");
} elseif ($data['user_status'] == 2) {
redirect(BASEDIR."setuser.php?error=2", "script");
}
} else {
redirect(BASEDIR."setuser.php?error=3");
}
}
Zmieniamy go na:
if (isset($_POST['login'])) {
$user_pass = md5($_POST['user_pass']);
$user_name = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", stripinput($_POST['user_name']));
$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_name='$user_name' AND (user_password='".md5($user_pass)."' OR user_password='$user_pass')");
if (dbrows($result) != 0) {
$data = dbarray($result);
if ($data['user_password'] == $user_pass) {
$result = dbquery("UPDATE ".$db_prefix."users SET user_password='".md5($user_pass)."' WHERE user_id='".$data['user_id']."'");
}
$cookie_value = $data['user_id'].".".$user_pass;
if ($data['user_status'] == 0) {
$cookie_exp = isset($_POST['remember_me']) ? time() + 3600*24*30 : time() + 3600*3;
header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
setcookie("fusion_user", $cookie_value, $cookie_exp, "/", "", "0");
redirect($_SERVER['HTTP_REFERER']);
} elseif ($data['user_status'] == 1) {
$loginerror = $locale['194'];
} elseif ($data['user_status'] == 2) {
$loginerror = $locale['195'];
}
} else {
$loginerror = $locale['196'];
}
}
if (isset($_REQUEST['logout']) && $_REQUEST['logout'] == "yes") {
header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
setcookie("fusion_user", "", time() - 7200, "/", "", "0");
setcookie("fusion_lastvisit", "", time() - 7200, "/", "", "0");
$result = dbquery("DELETE FROM ".$db_prefix."online WHERE online_ip='".USER_IP."'");
redirect($_SERVER['HTTP_REFERER']);
}
Krok 3
Teraz praktycznie już na amen pozbyliśmy go. Teraz trzeba przystosować fusiona do nowych realiów. Tak naprawdę to nic trudnego, bo w kodzie można odnaleźć ślady, pozostawione przez programistów że miało coś podobnego być ale nie zrobili. Tak więc wykorzystamy to co zrobili
Przechodzimy teraz do pliku infusion/user_info_panel/user_info_panel.php
W lini 27. tego pliku odnajdujemy wpis pozostawiony przez programistów, który wykorzystamy
echo "<div align='center'>".(isset($loginerror) ? $loginerror : "")."
Użyjemy go do wyświetlania informacji o błędzie podczas logowania. Jedyne co musimy w tym pliku poprawić to wylogowywanie. Zmieniamy linię 23 z:
echo "<img src='".THEME."images/bullet.gif' alt=''> <a href='".BASEDIR."setuser.php?logout=yes' class='side'>".$locale['084']."</a>\n";
Na:
echo "<img src='".THEME."images/bullet.gif' alt=''> <a href='".BASEDIR."index.php?logout=yes' class='side'>".$locale['084']."</a>\n";
Paczka do pobrania : no_setuser.zip
Komentarze
Dodaj komentarz
Oceny
Zaloguj się lub zarejestruj, żeby móc zagłosować.