ForumCała strona

Nawigacja

Aktualnie online

Gości online: 13

Użytkowników online: 0

Łącznie użytkowników: 25,400
Najnowszy użytkownik: AlojzyBartek

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

Zbigniew@
17.11.2024 11:33:24
Nie ten grzeszy kto pije, ale ten, kto się nie upije.

JazOOn
16.11.2024 20:46:18
tja

Zbigniew@
15.11.2024 18:58:17
Kto pije, ten nie bije.

JazOOn
31.10.2024 20:49:47
Kto pije?

piterus
30.10.2024 19:45:48
I będziemy śpiewać: "Kiedy 20 blisko, przebadaj wszystko, przebadaj wszystko..." Pfft

Pobierz nową wersję
Pobierz podręcznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Nawigacja

Pozbywamy się setuser.php

Napisane przez CyberSoft dnia 17 października 2008 11:20 · 9 komentarzy · 6696 czytań · Drukuj · Facebook · Wykop

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

Krok 2

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

#1 | zezol dnia 25 października 2008 22:32
Dziwie się, że pisałeś tą modyfikację pod v6, bo przydałoby się to pod v7...
#2 | CyberSoft dnia 27 października 2008 18:21
Wersja V7 jest całkowicie poza moim zainteresowaniem.
#3 | kisielll dnia 03 listopada 2008 20:06
Dzieki CyberSoft za tą wtyczke!
Mam tylko kilka pytań.
1: Po co robić kopie login.php ?
2: Po co zamieniać
Rozwiń Kod źródłowy
na
Rozwiń Kod źródłowy
? Przecież to to samo.
3: Mam starszą wersje v6 i musiałem zamienić właśnie w 23 linijce:
Rozwiń Kod źródłowy

na
Rozwiń Kod źródłowy

4: do czego wykorzystujemy
Rozwiń Kod źródłowy
?
#4 | CyberSoft dnia 04 listopada 2008 18:42
AD1. W sumie jest to zbędne, początkowo planowałem wprowadzenie modyfikacji również do tego pliku, jednak zapomniałem potem usunąć go z listy plików do wykonania backupa.

AD2. Błąd w wyświetlaniu artykułu.

AD3. Tak samo jest w 6.1.15

AD5. Kolejny błąd.
#5 | Artur-M dnia 16 stycznia 2009 22:40
Można prosić o taki artykuł dla PHP-Fusion v7?
#6 | kingsor dnia 01 września 2009 12:18
pic na wode. zrobiłe wszystko jak w poradniku i nie da sie wylogowac . buaahha.
#7 | kintar dnia 07 listopada 2009 23:34
wszystko śmiga jak powinno, musiałeś coś po drodze spierdzielic
#8 | fido1983 dnia 08 lutego 2010 10:01
Zauważyłem że w maincore.php pojawia się zmienna $_SERVER['HTTP_REFERER']
Czy to oznacza, że ta modyfikacja po zalogowaniu przekieruje nas do strony poprzednio oglądanej?
#9 | fido1983 dnia 08 lutego 2010 10:10
super działa!

Dodaj komentarz

Zaloguj się, aby móc dodać komentarz.

Oceny

Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się lub zarejestruj, żeby móc zagłosować.

Brak ocen. Może czas dodać swoją?
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl