Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak pamiątać logowanie na wielu stronach
Forum PHP.pl > Forum > PHP
bobmail
Witam

Nie mogę znaleźć adekwatnej sytuacji do mojej. Udało mi się stworzyć stronę logowania, odczytuję użytkowników z bazy danych, mogą sobie nadawać hasła do logowania, ale nie mogę przeskoczyć jednego problemu.

Skrypty pisałem w PHP wszystko jest lux, tylko po zalogowaniu użytkownik porusza się po wielu stronach html. Jak zrobić, że by informacja o zalogowanym użytkowniku mogła być przekazywana z podstrony na podstronę, bo w zależności od tego strona będzie miała różne zawartości. Nie jestem mocny w PHP programowałem trochę w Visual Basicu. Normalnie to zapamiętałbym jedną zmienną w pamięci i każda procedura mogłaby pobierać jej wartość i w zależności od niej pokazywać limitowane albo nie arkusze informacyjne. A jak zrobić żeby każda strona internetowa pobierała sobie informację o wartości jakiejś zmiennej (powiedzmy $idd), ze strony poprzedniej bez wypełniania jakichkolwiek pól lub formularzy?
tehaha
W php do tego służą sesje

http://php.net/manual/en/features.sessions.php
Niktoś
Cytat
W php do tego służą sesje

Ja bym jeszcze dodał query stringi w url oraz hidden fieldy.
markonix
Cytat(Niktoś @ 13.05.2012, 17:20:28 ) *
Ja bym jeszcze dodał query stringi w url oraz hidden fieldy.

Informacja o zalogowaniu przesyłana via GET/POST? Bez komentarza.
Niktoś
Cytat
Informacja o zalogowaniu przesyłana via GET/POST?

Nie jest to najlepszy sposób, ale możliwy do zrealizowania, więc wymieniłem.
markonix
example.com?zalogowany=0
example.com?zalogowany=1

Taki system logowania rozbroiła by nawet moja dziewczyna.
W kontekście autoryzacji w żadnym wypadku nie należy nawet o takim pomyśle wspominać.
W kontekście przekazywania informacji pomiędzy stronami już tak, ale żadnych danych wrażliwych.
Niktoś
Cytat
Taki system logowania rozbroiła by nawet moja dziewczyna.

Moja też, ale czy ja o takim systemie coś wspominałem?Taki system oparty o $get ,trzeba dodatkowo filtrować i wspierać się o bazy danych,jest możliwy do wykonania lecz trudniejszy w implementacji.
Nie trzeba używać sesji aby się zalogować, nigdzie nie jest to powiedziane, ale tak jest łatwiej.
bobmail
Ok, wstawiłem coś takiego:

session_start();

if(isset($_SESSION['views']))
{
$_SESSION['views']=$_SESSION['views']+1;
}
else
{
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
}

i wynik na tel samej stronie oczywiście
Views=1


a na następnej stronie oddaje taki komunikat:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/.....WWW.MOJA STRONA...

na wywołałem to tak:
echo "views=views";
echo "Views= $views";

wynik:

Views = (nic!)
greycoffey
Cytat(Niktoś @ 13.05.2012, 22:37:36 ) *
Ja bym jeszcze dodał query stringi w url oraz hidden fieldy.
[...]
Nie trzeba używać sesji aby się zalogować, nigdzie nie jest to powiedziane, ale tak jest łatwiej.

Oj Niktosiu, znowu zahaczasz o tematykę sesji.
Aby tylko zalogować się, używanie sesji jest głupim pomysłem, nie wiem nawet jak to wykorzystać. Za to sesje to mechanizm służący do przechowywania danych pomiędzy żądaniami.
Nie wiem na czym polegają te twoje query stringi i hidden fieldy, ale jeżeli przekazujesz w nixch dane jednoznacznie identyfikujące użytkownika, jest to sesja, a jeśli jak wyżej wymienione "zalogowany=1", to jest to najgłupszy pomysł jaki może być i nie powinieneś sugerować tego autorowi tematu.
Tak jak w wielu wcześniejszych tematach - sesja.

@UP: Proszę. Naprawde są setki tematów o tym problemie i odesłanie cię do google nie wyświetli tego tematu wink.gif
Niktoś
@greycoffey
Cytat
Aby tylko zalogować się, używanie sesji jest głupim pomysłem, nie wiem nawet jak to wykorzystać. Za to sesje to mechanizm służący do przechowywania danych pomiędzy żądaniami.

Zgadzam się z tobą w pełni,jednak myślę że nie jest to absolutne meritum.Zamiast sesji ,możesz użyć tabel temporalnych z bazach danych + metody get do wiązania danych między stronami.
example.com?name="Jacek"
select user,zalogowany from @TEMP_TABLE where name="Jacek"
If (zalogowany){
}else{
}

To taki drobny przykład.Nie jest powiedziane,że musisz użyć sesji żeby wiązać dane.Można np.tworzyć tabele temporalne których czas życia==czas zamknięcia browsera i wiązać dane przez querystring pomiędzy stronami tworzyć unikalne tokeny przy każdorazowym requeście.Inaczej mówiąc stworzyć całkiem odrębny mechanizm nieoparty na sesji ,zapisywany np.tabeli temporalnej.Coś ala, cookieless w asp.Net.

PS.Do autora ,to jakiś licznik?
  1.  
  2. if(isset($_SESSION['views']))
  3. {
  4. $_SESSION['views']=$_SESSION['views']+1;
  5. }
  6. else
  7. {
  8. $_SESSION['views']=1;
  9. echo "Views=". $_SESSION['views'];
  10. }

Na drugiej stronie wynik wyświetlasz tak:
  1. echo $_SESSION['views'];
bobmail
to nie licznik pobrałem to ze strony http://php.net/manual/en/features.sessions.php, tak jak podesłał tehaha

ta komenda: echo $_SESSION['$views'];

też mi nie cyka

cały skrypt wygląda tak:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
echo 'jestem';
echo $_SESSION['views'];

?>
</body>
</html>


wyświetla kontrolne "jestem" ale wartośc views nie oddaje


jak dokładam session_start(); to wywali mi taki komunikat:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ...
Niktoś
Nie czytasz.Jeśli używasz sesji to na samym początku w każdym skrypcie musi być:session_start(); czyli:
  1. <?php
  2. echo 'jestem';
  3. echo $_SESSION['views'];
  4.  
  5. ?>

Sprawdź teraz.
bobmail
czytam Niktosiu czytam i to już każdy znak, bo w nich może być błąd :-). No właśnie jak dołożę session_start(); to mi wywala taki komunikat:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at I TU MOJA STRONA
Niktoś
Z tego co się zorientowałem, to nie wina skryptu ,tylko strony kodowej zapisanego pliku.
Spróbuj zapisać ten plik UTF-8 bez BOM.
Twój problem był opisywany na forum:
http://forum.php.pl/lofiversion/index.php/t85888.html
bobmail
rzeczywiście ten sam problem, jak zapisałem w Notatniku w ANSI to wychodziły krzaczki zamiast polskich liter, ale jak zapisać w txt bez BOM? Próbowałem i d...
Niktoś
Ściągnij notepad++ i tam zapisz w utf8-bez bom , w notatniku tego nie zrobisz.
greycoffey
Cytat(Niktoś @ 13.05.2012, 23:23:25 ) *
@greycoffey

Zgadzam się z tobą w pełni,jednak myślę że nie jest to absolutne meritum.Zamiast sesji ,możesz użyć tabel temporalnych z bazach danych + metody get do wiązania danych między stronami.
example.com?name="Jacek"
select user,zalogowany from @TEMP_TABLE where name="Jacek"
If (zalogowany){
}else{
}

To taki drobny przykład.Nie jest powiedziane,że musisz użyć sesji żeby wiązać dane.Można np.tworzyć tabele temporalne których czas życia==czas zamknięcia browsera i wiązać dane przez querystring pomiędzy stronami tworzyć unikalne tokeny przy każdorazowym requeście.Inaczej mówiąc stworzyć całkiem odrębny mechanizm nieoparty na sesji ,zapisywany np.tabeli temporalnej.Coś ala, cookieless w asp.Net.

To są sesje wink.gif Identyfikujesz na podstawie "name" które jest unikalnym kluczem tak samo jak zawsze SESSID, a przekazywanie przez $_GET to jedna z gorszych implementacji, cookie są stworzone do tego i lepiej oraz bezpieczniej wypełniają swoje zadanie. Jeśli chodzi o unikalne tokeny co request, to nawet lepiej można wykorzystać do ich przechowywania cookie (chyba, że to zabezpieczenie przed CSRF) - jeśli użytkownik odświeży stronę, będzie wszystko dobrze, a w twoim wypadku powinien mieć nowy token - tak samo, jak w sytuacji gdyby otworzył wiele kart).

Ja od jakiegoś czasu stosuję dwa identyfikatory sesji - jeden ma bardziej rygorystyczne zasady, krótszy czas życia, stosowany do wszelkich spraw, gdzie potzrzebna jest autoryzacja. Za to w drugim, przechowuje wszystkie dane, które muszą być przez dłuższy czas - m.in. token służący do automatycznego logowania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.