Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TUT] Sesje + hash


ClassAxion

Rekomendowane odpowiedzi

Opublikowano

Witam!

Za prezentuje wam jak w łatwy sposób możemy zrobić sesje (Autoryzację gracza które chce wejść na np. konto.php które wymaga zalogowania)

Zaczynamy.

 

na początek w każdym pliku w którym chcemy mieć dostępne nasze "sesje" lub "autoryzacje" dodajemy na początku:

<?php
session_start();
?>

lub w pliku konfiguracyjnym (lub łączenia z bazą), który jest przeważnie dodawany do wszystkich plików gry.

 

Następnie musimy zapisać id, hash naszego gracza do sesji.

W pliku odpowiadającym za logowanie dodajemy (W miejscu w którym wszystko jest poprawne i można gracza zalogować):

 

Zmienna $gracz['id'] przechowuje id gracza.

$_SESSION = array();
$_SESSION['id'] = $gracz['id'];
$_SESSION['hash'] = sha1($user['id'] . $_SERVER['REMOTE_ADDR']);

1 linijka odpowiada za przeczyszczenie naszej sesji, 2 za wpisanie do sesji Identyfikator (id) gracza, 3 odpowiada za 'Hash' Sesji dodając do niej specialny, zakodowany w sha1 ciąg znaków.

 

Dobrze, stworzyliśmy sesję, zapisaliśmy w niej użytkownika, co dalej?

Musimy sprawdzić jakoś czy gracz jest zalogowany.

Stwórzmy plik Test.php który będziemy dołączać do każdego pliku który ma być dostępny tylko dla zalogowanego użytkownika.

Oto kod tego pliku:

@session_start(); // Startujemy sesję

if(empty($_SESSION['id']) or empty($_SESSION['hash'])){
    $_SESSION = array();
    header("Location: index.php");
} else {
    $session_check = sha1($_SESSION['id'] . $_SERVER['REMOTE_ADDR']);
    if($_SESSION['hash'] != $session_check){
        $_SESSION = array();
        header("Location: index.php");
        exit;
    }
    $uzytkownik = @mysql_fetch_array(mysql_query("select * from gracze where id =".$_SESSION['id'])); // Pobieranie uzytkownika z bazy
    if(empty($uzytkownik)){
        $_SESSION = array();
        session_destroy();
        header('Location: index.php');
        exit;
    }
}

Dzięki linijce 13 czyli $uzytkownik = @mysql_fetch_arr... pobieramy użytkownika z bazy, przez co w każdym pliku z autoryzacją mamy dane naszego użytkownika w zmiennej $użytkownik, dzięki czemu nie musimy pobierać "Manualnie" użytkownika z bazy.

 

Ale jak wylogować / usunąć sesję gracza?

Wystarczy usunąć sesję tzn.

$_SESSION = array();
session_destroy();

Dobrze jest także od razu przekierować użytkownika na stronę główną, otrzymamy taki kod:

$_SESSION = array();
session_destroy();
header('location: index.php');
exit;

 

I to by było na tyle.

Pozdrawiam! ;)

Opublikowano

Nie zrozumiałe w huj... Ja zazwyczaj daję każdemu Użytkownikowi losowy 30 literowy/liczbowy kod i potem daję go do sesji. I po tym kodzie szuka w tabeli

Tak, lecz do tego potrzebna jest baza. Mam też wersję z bazą lecz wstrzymam się z tutkiem. Bo czasu nie mam.

 

 

Tym systemem nie do końca da się przejąć sesję (dobrze), ale wciąż można się zalogować na tego samego użytkownika z różnych komputerów jednocześnie (źle)

Wiem, lecz będę miał chwilkę czasu to to przerobię, chodzi Ci o "kradnięcie" sesji? :) Czy o to, że np. Na jedno konto może się zalogować kilka użytkowników jednocześnie? Do tego wystarczy zrobić w bazie tabelkę, i gdy logujesz się, to sprawdza czy przypadkiem nie jest ktoś zalogowany.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...