Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Logowanie + cookies
Forum PHP.pl > Forum > Przedszkole
Andriej20
Witam.
Mam mały problemik z logowaniem przy użyciu cookies. Pierwsza stronka to zwykły formularz. W drugiej (jeśli login i hasło jest poprawne) tworzone jest "ciasteczko". W trzecim pliku domyślnie ma być strefa dla zalogowanych i niezalogowanych użytkowników. Niestety co bym nie robił to zawsze pokazuje, że jestem niezalogowany :/ Ktoś ma jakieś pomysły?

PLIK 1
  1. </head>
  2. <form method="post" action="logowanie1.php">
  3. Login <input type="text" name="login" size="20"><br>
  4. Hasło <input type="text" name="haslo" size="20"><br>
  5. <input type="submit" value="submit">
  6. </form>
  7. </body>
  8. </html>


PLIK 2
  1. <?php
  2. $login2 = "login";
  3. $haslo2 = "pass";
  4. if (($login2==$_POST['login'])&&($haslo2==$_POST['haslo'])) {
  5. setcookie("zalogowany", "dostep", time()+3600);
  6. header("Location: $HTTP_REFERER");
  7. echo 'Witaj. Kliknij <a href="logowanie2.php">tutaj</a> aby przejsc dalej.';
  8. }
  9. else
  10. echo 'Zły login';
  11. ?>


PLIK 3
  1. <?php;
  2. if ($_COOKIE['zalogowany']=="dostep"){
  3.  echo "Dostep dla zalogowanych";
  4. }
  5. else
  6. echo "Zaloguj się.";
  7. ?>


Z góry dzięki za wszelką pomoc.
Pozdrawiam, Andriej20.
markotny
Jeśli mogę coś podpowiedzieć to tyle że ciasteczko musi być nagłówku pliku. Czyli sprawdzasz poprawność logowania przekierowujesz do pliku ustawiajacego ciasteczko i wracasz do pliku głownego.
Ten sam problem jest poruszony http://forum.php.pl/index.php?showtopic=76393&hl=
cornholio666
Logowanie na samych ciastkach nie jest bezpieczne,

Mogę sobie sam stworzyć ciastko zalogowany = 'dostep' i nie bede musial znac hasla ani loginu.

Lepiej poczytaj o sesjach
Andriej20
Cytat(cornholio666 @ 6.09.2007, 21:18:32 ) *
Logowanie na samych ciastkach nie jest bezpieczne,

Mogę sobie sam stworzyć ciastko zalogowany = 'dostep' i nie bede musial znac hasla ani loginu.

Lepiej poczytaj o sesjach


Hm... z sesjami bawiłem się przy okazji innego skryptu i niestety nie za bardzo chciały działać (a naczytałem się sporo o sesjach), w końcu pominąłem sesje i użyłem czegoś innego.
Ogólnie główny problem to jak sprawić aby ciasteczko (lub sesja) była widziana na kolejnych podstronach - nie potrafię zrobić tak aby ciacha lub sesje były przesyłane między różnymi stronami. Zapewne jest to bardzo proste, ale w php bawię się od niedawna, a dodatkowo trochę czas mnie goni.
PanGuzol
Aby sesja była utrzymana na poczatku każdego pliku musisz umieścić session_start" title="Zobacz w manualu PHP" target="_manual
Andriej20
Cytat(PanGuzol @ 6.09.2007, 23:20:18 ) *
Aby sesja była utrzymana na poczatku każdego pliku musisz umieścić session_start" title="Zobacz w manualu PHP" target="_manual


Wiem, że trzeba umieszczać session_start, ale nikt nigdzie nie napisał, że trzeba dodawać do linków coś takiego jak "SID" (bez tego działać sesje nie chcą, przynajmniej u mnie.) winksmiley.jpg Dzięki Twojemu linkowi nareszcie się tego doszukałem, THX.

Pozdrawiam, Andriej20.


EDIT:

Chwilowo takie coś wymyśliłem. Czy taki sposób na przekazanie zmiennych jest poprawny?
  1. <?php
  2. $login2 = "login";
  3. $haslo2 = "pass";
  4. if (($login2==$_POST['login'])&&($haslo2==$_POST['haslo'])) {
  5. $_SESSION['logowanie']='zalogowany';
  6. echo 'Witaj. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  7. }
  8. else
  9. echo 'Zły login. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  10. ?>

<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php

if (isset($_SESSION['logowanie'])){
echo "Dostep dla zalogowanych";
}
else
echo "Zaloguj się.";
?>
[php][/php]
.radex
  1. <?php
  2. $login2 = "login";
  3. $haslo2 = "pass";
  4. if (($login2==$_POST['login'])&&($haslo2==$_POST['haslo'])) {
  5. $_SESSION['logowanie']='zalogowany';
  6. echo 'Witaj. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  7. }
  8. else
  9. echo 'Zły login. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  10. ?>



źle. session_start musi być od razu po <?php.... To raz. Dwa - po jakie licho dajesz SID? Jest to opcjonalne przecież.

Aha, no i jeszcze jedno.
$haslo2==$_POST['haslo']
jest raczej źle. Powinno być:
$_POST['haslo']==$haslo2

Poczytaj o wyrażeniach winksmiley.jpg
Andriej20
Cytat(radex_p @ 7.09.2007, 08:23:11 ) *
Dwa - po jakie licho dajesz SID? Jest to opcjonalne przecież.



Gdy nie dam SID to po przejściu na następną stronę skrypt nie widzi sesji i wypisuje "Zaloguj się" nawet jeśli logowanie nastąpiło poprawnie.
tsharek
Cytat(radex_p @ 7.09.2007, 08:23:11 ) *
Aha, no i jeszcze jedno.
$haslo2==$_POST['haslo']
jest raczej źle. Powinno być:
$_POST['haslo']==$haslo2



Od kiedy kolejność w porównywaniu ma znaczenie?
Andriej20
Wszystko chwilowo działa, ale wolę się upewnić czy sposób w jaki to zrobiłem jest w miarę poprawny i bezpieczny.
A więc po kolei.
Plik 1 - formularz.
Plik 2 - logowanie.
Plik 3 - strona właściwa z pływającą ramką.
Plik 4 - pływająca ramka, która również ma być niedostępna do niezalogowanych.
Czy jest to wszystko w miarę funkcjonalne (pomijam te problemy z SID, złą kolejność zapisu porównania zmienny etc.)?

  1. <form method="post" action="logowanie1.php">
  2. Login <input type="text" name="login" size="20"><br>
  3. Hasło <input type="text" name="haslo" size="20"><br>
  4. <input type="submit" value="submit">
  5. </form>


  1. <?php
  2. $login2 = "login";
  3. $haslo2 = "pass";
  4. if (($login2==$_POST['login'])&&($haslo2==$_POST['haslo'])) {
  5. $_SESSION['logowanie']='zalogowany';
  6. echo 'Witaj. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  7. }
  8. else
  9. echo 'Zły login. Kliknij <a href="logowanie2.php?' . SID . '">tutaj</a> aby przejsc dalej.';
  10. ?>


  1. <?php
  2. if (isset($_SESSION['logowanie'])){
  3.  echo '<iframe width="100" height="100" src="frame.php?' . SID . '">';
  4. }
  5. else
  6. echo "Zaloguj się.";
  7. ?>


  1. <?php
  2. if (isset($_SESSION['logowanie'])){
  3.  echo 'blablabla';
  4. }
  5. else
  6. echo "Zaloguj się.";
  7. ?>
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.