TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
Parę pytań o schemat działania pewnych mechanizmów w programowaniu / PHP / , kubazzz 12/02/09 20:03 1. Chciałbym na przykład sprawdzić, czy jakaś zmienna równa się jakiejś wartości ze zbioru, inaczej mówiąc czy x równa się a, albo b, albo c, albo d.
Da się to zapisać za jednym podejściem?
Czy trzeba rozbić na x==a || x==b || x==c || x==d
[ja miałem coś takiego na myśli, ale nie działa: x == (a || b || c || d) ].
2. Jak dokladnie wyglada taki mechanizm logowania uzytkownikow jaki jest na wielu stronach, w tym na tpc?
W zasadzie to ja wykombinowalem idee, ale boje sie ze czegos nie przewidze piszac cos takiego.
To co wiem przedstawie w punktach:
1. Uzytkownik logujac sie na stronie podaje haslo i login, skrypt php sprawdza zgodnosc tego hasla i loginu na podstawie bazy danych uzytkownikow. nihil novi.
2. kiedy haslo i login sie zgadzaja, skrypt generuje klucz sesji, np $ses_id = md5($login+time()) i zapisuje $ses_id do bazy danych, do tablicy SESJE oraz dodatkowo do COOKIE po stronie uzytkownika.
3. Kiedy ktokolwiek wchodzi na strone to skrypt sprawdza, czy istnieje COOKIE, czy jest w tym ciasteczku zapisany klucz sesji, jesli jest to sprawdza czy istnieje taki klucz w bazie, w tablicy SESJE, jesli istnieje to traktuje uzytkownika jako zalogowanego.
Pytanie teraz - jakie rzeczy powinno sie w tym mechanizmie zmodyfikowac, albo dopisac, zeby
a - byl on bardziej bezpieczny [nie jak w CIA, ale zeby nie dalo sie zbyt latwo podpiac pod kogos]
b - zeby byl bardziej wydajny, moze jakos zmniejszyc ilosc zapytan do bazy danych, czy zapytan o ciasteczko
3. Zrobilem sobie skrypt do laczenia z baza danych, w zasadzie to zwykle pare linijek.
$baza_connected = false;
$baza = new mysqli('serwer.pl','db','haslo','db');
if (mysqli_connect_errno()) {
printf("Nieudane połączenie z bazą: %s\n", mysqli_connect_error());
$baza_connected = false;
exit();
}
else
{
echo "udało się połączyć z bazą!<br/>";
$baza_connected = true;
}
i potem sobie piszę w kodzie
if($baza_connected == true)
{
// robi coś tam
}
Zrobiłem tak, żeby unikać zbyt dużo osadzonych klamerek.
Moja wątpliwość jest teraz taka - jeśli wyrzucę ten kod łączenia się z bazą do osobnego pliku i dam include, albo require, to jak będzie traktowana zmienna $baza_connected ?
A może zrobić z tego funkcję? A może funkcję w osobnym pliku?
To są dosyć lamerskie pytania, zdaję sobie sprawę, wynika to z braku kompleksowej wiedzy i doświadczenia, trochę szukałem odpowiedzi, trochę znalazłem, ale jednak odpowiedź żywego człowieka jest dla mnie lepsza niż samodzielna intepretacja google results.SM-S908 - hmm , _oLo_1984 12/02/09 20:59
1. in_array() - w manualu doczytasz szczegóły
2. generalnie / schematycznie tak to się przedstawia, przynajmniej z mojego doświadczenia, dodaj do tego jeszcze zapiswanie przeglądarki użytkownika do bazy i session_regenerate_id i coś całkiem przyzwoitego będzie
3. można to zapisać do osobnego pliku i zrobić z tego funkcję, nie wiem w jakim stopniu umiesz programować, ale zobacz może co to jest sterownik mysql - może to Cię na coś naprwadziawake - rozszerz kwestię , kubazzz 12/02/09 22:16
session_regenerate_idSM-S908 - kwestia bezpieczeństwa , _oLo_1984 13/02/09 07:23
używając jej utrudnisz potencjalnemu złoczyńcy przejęcie identyfikatora sesjiawake
- hashowanie hasla , TheW@rrior 12/02/09 22:28
trochę kodu który powoduje że wysyłamy jedynie zaszyfrowane hasło:
if($haslo != $row[hash]) $haslo = md5($haslo.$row[klucz]); //jesli haslo nie zgadza sie z tym co mamy w tablicy to hashujemy
if($haslo == $row[hash]) { //jesli sie zgadza
unset($_SESSION['haslo']); //ponowne generowanie klucza i hasha na podstawie tego klucza
$klucz = substr(md5(microtime()),0,8);
$hashed = md5($row[haslo].$klucz);
$_SESSION["haslo"]=$hashed;
mysql_query("UPDATE uzytkownik SET klucz='$klucz', hash='$hashed' WHERE login='$login';");People who fear free software are those
whose products are worth even less - hmm , kubazzz 12/02/09 22:54
to pominąłęm w opisie w sumie, ale ja w swoich założeniach wzialem to pod uwage i przy rejestracji uzytkownika, haslo jest hashowane whirlpool'em. i w bazie danych sa tylko hashe hasel.
i kiedy przy logowaniu uzytkownik podaje haslo, w formularzu, to przed porownaniem jest ono tez hashowane.
Do tego mialem koncepcje, ze jest tablica z danymi sesji tylko:
ses_id / login / ses_hash / ses_browser
Żeby nie opierać się na zmiennej $_SESSION bo to przepada jak zamkniesz przeglądarkę.
A ja chcę, żeby użytkownika zapamiętało. Dlatego racze cookies 'recznie' ustawiane.
ten ses_hash to byłby jakis hash [np md5($login.microtime())] inny niż hash hasła.
W tym co podałeś troche się gubię, bo strasznie dużo zmiennych jest.SM-S908
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|