Tani hosting

Modyfikacja Zapamiętaj mnie - automatyczne logowanie na 14 dni
kmike Offline
Pomocnik

Liczba postów: 2,092
Reputacja: 232
Post: #1
Zapamiętaj mnie - automatyczne logowanie na 14 dni 20-01-2013 16:19
Modyfikacja zapisuje w plikach cookie sesje użytkownika na czas 14 dni.

Numery linii mogą się nie zgadzać więc patrz po nazwach funkcji. Zrób backup plików przed zmianami.

Można testować na stronie http://zycieismierc.com.pl/

PLIK login.php:
Linia 25:
Kod:
        $user->setSession('submit','login','pass');

zamień na:
Kod:
        $user->setSession('submit','login','pass','rememberMe');

PLIK admin\apps\users\app_page.php:
linia od 216 do 224
Kod:
                    echo '<form action="'.$rewrite->login.'" method="post">
                            <label>Login</label>
                            <input type="text" name="login" maxlength="16" />
                            <label>Hasło</label>
                            <input type="password" name="pass" />
                            <br/>
                            <input type="submit" name="submit" value="Zaloguj się" />
                            <div style="text-align:center;"><a href="?remind">Zapomniałeś hasła?</a></div>
                        </form>';

zamień na:
Kod:
                    echo '<form action="'.$rewrite->login.'" method="post">
                            <label>Login</label>
                            <input type="text" name="login" maxlength="16" />
                            <label>Hasło</label>
                            <input type="password" name="pass" />
                            <label>Pamiętaj mnie (14 dni)</label>
                            <input type="checkbox" style="float: left" checked="checked" name="rememberMe" />
                            <div style="clear: both;"></div><br/>
                            <input type="submit" name="submit" value="Zaloguj się" />
                            <div style="text-align:center;"><a href="?remind">Zapomniałeś hasła?</a></div>
                        </form>';

3 funkcje w liniach od 124 do 159
Kod:
    function sessionTools() {
        if(isset($_GET['logout'])) {
            if(($_GET['logout']=='true')) {
                $_SESSION['login'] = array();
                $_SESSION['pass'] = array();
                header('Location:'.$_SERVER['HTTP_REFERER']);
            }
        }
    }
    function setSession($submit, $login, $pass) {
        if(isset($_POST[$submit])) {
            $_SESSION['login'] = mysql_real_escape_string($_POST[$login]);
            $_SESSION['pass'] = md5($_POST[$pass]);
        }
    }
            
    function verifyLogin($rank = NULL) {
        if(isset($_SESSION['login']) && isset($_SESSION['pass'])) {
            $query = mysql_query("SELECT * FROM `$this->table` WHERE `user`='".$_SESSION['login']."' AND `pass`='".$_SESSION['pass']."' AND `active`='1'");
            if(mysql_num_rows($query) == 0) {
                unset($_SESSION['login']);
                unset($_SESSION['pass']);
                return 0;
            }
            else if(mysql_num_rows($query) == 1) {
                $user = mysql_fetch_array($query);
                if($user['rank'] == 3) header('Location: http://'.$this->host().'/banned.php');
                else {
                    $date = date('Y-m-d H:i:s'); $ip = $_SERVER['REMOTE_ADDR'];
                    mysql_query("UPDATE `$this->table` SET `last_seen`='$date', `last_ip`='$ip' WHERE `user`='".$_SESSION['login']."'");
                    return 1;
                }
                mysql_query("UPDATE `$this->table` SET `remind`=NULL WHERE `id`='".$user['id']."'");
            }
        }
    }
zmień na:
Kod:
    function sessionTools() {
        if(isset($_GET['logout'])) {
            if(($_GET['logout']=='true')) {
                $_SESSION['login'] = array();
                $_SESSION['pass'] = array();
                setcookie ("ImLoggedIn", "", time() - 3600, "/login"); // dla przyjaznych linków "/login" dla wyłączonych "/"
                header('Location: ?logout=true&cookiedestroy=true');
                if($_GET['cookiedestroy'] == 'true')
                {
                    header('Location:'.$_SERVER['HTTP_REFERER']);
                }
            }
        }
    }
    function setSession($submit, $login, $pass, $rememberMe) {
        if(isset($_POST[$submit])) {
            $_SESSION['login'] = mysql_real_escape_string($_POST[$login]);
            $_SESSION['pass'] = md5($_POST[$pass]);
            if($rememberMe)
            {
                setcookie("ImLoggedIn", $_SESSION['login'].'~'.$_SESSION['pass'], time()+1209600);
            }
            
        }
    }
            
     function verifyLogin($rank = NULL) {
        if(isset($_COOKIE['ImLoggedIn'])){
            $thisCookie = explode('~', $_COOKIE['ImLoggedIn']);
        }
        if(!empty($thisCookie[1]) && !empty($thisCookie[0]))
        {
            $thisCookie = explode('~', $_COOKIE['ImLoggedIn']);
            $_SESSION['login'] = $thisCookie[0];
            $_SESSION['pass'] = $thisCookie[1];
        }
        if(isset($_SESSION['login']) && isset($_SESSION['pass'])) {
            $query = mysql_query("SELECT * FROM `$this->table` WHERE `user`='".$_SESSION['login']."' AND `pass`='".$_SESSION['pass']."' AND `active`='1'");
            if(mysql_num_rows($query) == 0) {
                unset($_SESSION['login']);
                unset($_SESSION['pass']);
                return 0;
            }
            else if(mysql_num_rows($query) == 1) {
                $user = mysql_fetch_array($query);
                if($user['rank'] == 3) header('Location: http://'.$this->host().'/banned.php');
                else {
                    $date = date('Y-m-d H:i:s'); $ip = $_SERVER['REMOTE_ADDR'];
                    mysql_query("UPDATE `$this->table` SET `last_seen`='$date', `last_ip`='$ip' WHERE `user`='".$_SESSION['login']."'");
                    return 1;
                }
                mysql_query("UPDATE `$this->table` SET `remind`=NULL WHERE `id`='".$user['id']."'");
            }
        }
    }
(Ten post był ostatnio modyfikowany: 25-06-2013 14:49 przez kmike.)
WWW Cytuj
Diabeł Online
Użyszkodnik


Liczba postów: 777
Reputacja: 666
leom112 Offline
Użytkownik

Liczba postów: 46
Reputacja: 3
Post: #2
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 21-01-2013 00:21
Działa, ale jest jeden problem. Jak się wyloguje sam z siebie to już nie powinno raczej logować na to konto automatycznie ( tak jak na innych stronach ). A tutaj jak tylko nacisnę spowrotem "zaloguj" to loguje automatycznie. Da się to zmienić tak, że jak sam kliknę "wyloguj" to wtedy muszę wprowadzić dane jeszcze raz? Bo jak chce się przelogować to trochę lipa :/
Cytuj
kmike Offline
Pomocnik

Liczba postów: 2,092
Reputacja: 232
Post: #3
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 21-01-2013 08:50
Podaj adres strony. Specjalnie dałem podwójne przekierowanie po wylogowaniu, żeby nic podobnego nie miało miejsca. Sprawdzam teraz u siebie i działa dobrze.
WWW Cytuj
Domen Offline
Użytkownik

Liczba postów: 12
Reputacja: 0
Post: #4
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 27-01-2013 18:33
Też mam ten sam problem :/ Jest jakieś rozwiązanie?
Cytuj
kmike Offline
Pomocnik

Liczba postów: 2,092
Reputacja: 232
Post: #5
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 27-01-2013 19:03
Podaj adres strony i ewentualnie przeglądarkę jakiej używasz.

Spróbuj zmienić funkcję sessionTools() na
Kod:
    function sessionTools() {
        if(isset($_GET['logout'])) {
            if(($_GET['logout']=='true')) {
                if($_GET['cookiedestroy'] == 'true')
                {
                    header('Location:'.$_SERVER['HTTP_REFERER']);
                }
                else
                {
                    $_SESSION['login'] = array();
                    $_SESSION['pass'] = array();
                    setcookie ("ImLoggedIn", "", time());
                    header('Location: ?logout=true&cookiedestroy=true');
                }
            }
        }
    }

- Pakiet aplikacji FB - 120 zł
- Pakiet WSZYSTKICH modyfikacji - 169 zł

WWW Cytuj
Domen Offline
Użytkownik

Liczba postów: 12
Reputacja: 0
Post: #6
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 27-01-2013 19:33
Adres masz na PW, zmieniłem funkcję sessionTools() na to co jest powyżej i dalej to samo (Chrome i Firefox).
Cytuj
damianjoker Offline
Użytkownik

Liczba postów: 77
Reputacja: 1
Post: #7
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 02-02-2013 20:54
Nie przemyślałeś tego, że jeżeli ktoś modyfikował plik app_page.php, to ma inne linijki... CZYLI ŻE LINIE SIĘ PO ZAMIENIAŁY I MODYFIKACJA MOŻE NIE DZIAŁAĆ PRAWIDŁOWO!
Cytuj
kmike Offline
Pomocnik

Liczba postów: 2,092
Reputacja: 232
Post: #8
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 02-02-2013 21:02
Powiedziałeś co wiedziałeś... Dzięki za sugestię. Wychodzę jednak z założenia, że ktoś zabierając się za modyfikację szuka zbieżności w kodzie, a nie wkleja bez zastanowienia to co ma w schowku.

- Pakiet aplikacji FB - 120 zł
- Pakiet WSZYSTKICH modyfikacji - 169 zł

WWW Cytuj
zyznos321 Offline
Donator TenTego 2.x

Liczba postów: 39
Reputacja: 0
Post: #9
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 09-02-2013 11:46
U mnie też automatycznie loguje na zapamiętane konto po kliknięciu zaloguj.
Da się to jakoś naprawić? Może rozwiązaniem byłaby zmiana cookie przy wylogowywaniu?
Cytuj
kmike Offline
Pomocnik

Liczba postów: 2,092
Reputacja: 232
Post: #10
RE: Zapamiętaj mnie - automatyczne logowanie na 14 dni 09-02-2013 13:22
Jaka przeglądarka?
Jeżeli ktoś mi udostępni swój skrypt do testów to mogę spróbować to jakoś poprawić. Instalowałem skrypt na 3 serwisach i u siebie, bez problemu.

- Pakiet aplikacji FB - 120 zł
- Pakiet WSZYSTKICH modyfikacji - 169 zł

WWW Cytuj


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości