Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Problem z setcookie
panryz
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2010

Ostrzeżenie: (0%)
-----


Witam. Robie strone internetową gdzie mam panel logowania ktory wyciaga uzytkowników z bazy danych. Logowanie jest zapisywane na ciasteczkach a mimo to nie działa.
Oto plik z logowaniem
  1. <?php
  2.  
  3. $ciastko = isset($_COOKIE['twojastrona']);
  4.  
  5. if(isset($ciastko)){
  6.  
  7. require_once('config.php');
  8.  
  9. $query = "SELECT * FROM users WHERE haslo='$ciastko'";
  10. $result = mysql_query($query);
  11. $row = @mysql_fetch_assoc($result);
  12.  
  13. if($row){
  14.  
  15. $_SESSION['login'] = $row['login'];
  16. $_SESSION['haslo'] = $row['haslo'];
  17. //$_SESSION['data'] = $row['data'];
  18. //$_SESSION['id'] = $row['id'];
  19. echo'Zostałeś poprawnie <br>zalogowany na stronę<br />';
  20.  
  21. }
  22.  
  23. }
  24.  
  25. if ($_POST){
  26.  
  27. if(!empty($_POST["login"]) AND !empty($_POST["haslo"])){
  28.  
  29. require_once('config.php');
  30.  
  31. $login = czysc($_POST["login"]);
  32. $haslo = czysc($_POST["haslo"]);
  33.  
  34. $query = "SELECT * FROM users WHERE login='$login' AND haslo=md5('$haslo')";
  35. $result = mysql_query($query);
  36. $row = @mysql_fetch_assoc($result);
  37.  
  38. if ($row){
  39.  
  40. $_SESSION['login'] = $row['login'];
  41. $_SESSION['haslo'] = $row['haslo'];
  42. //$_SESSION['data'] = $row['data'];
  43. //$_SESSION['id'] = $row['id'];
  44.  
  45. if(isset($_POST['zapamietaj'])){
  46.  
  47. setcookie('twojastrona',$_SESSION['haslo'],time()+31536300);
  48.  
  49. echo'ustawiono ciastko<br />';
  50.  
  51. }
  52.  
  53. header("Location: index3.php");
  54.  
  55.  
  56. }else{
  57.  
  58. echo 'Nieprawidłowy login lub hasło<br />';
  59.  
  60. }
  61.  
  62. }else{
  63.  
  64. echo 'wpisz login i hasło<br />';
  65.  
  66. }
  67.  
  68. }
  69.  
  70. ?>


a to sprawdzanie czy cookie istnieje
  1. <?php
  2. if(isset($_COOKIE['twojastrona']))
  3. include("ocs.php") ;
  4. else
  5. echo 'nie jestes zalogowany';
  6. ?>


I okazuje sie ze loguje dobrze ale ciastek nie trzyma. Czy ktos potrafi temu zaradzic?
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


Witam.

Przeanalizuj pierwsze linijki ...

  1. /**
  2.  * @var boolean $ciastko zawsze równa się true lub false
  3.  */
  4. $ciastko = isset ( $_COOKIE['twojastrona'] );
  5. if ( isset ( $ciastko ) ) {
  6. /**
  7.  * To wyrażenie jest zawsze prawdziwe
  8.  */
  9. }


Ten post edytował rocktech.pl 22.06.2012, 07:48:39


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
panryz
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2010

Ostrzeżenie: (0%)
-----


  1. $ciastko = $_COOKIE['twojastrona'];
  2.  
  3. if(isset($ciastko)){


tez nie dziala
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


Witam.

Tak.

  1. if ( isset( $_COOKIE['twojastrona'] ) ) {
  2. }


Tu jest źle bo sprawdzasz czy istnieje zmienna $ciastko która linijkę wcześniej zainicjowałeś!
  1. $ciastko = $_COOKIE['twojastrona'];
  2. if( isset( $ciastko ) ) {
  3. }


Jeżeli chcesz sprawdzić czy interpreter działa poprawnie smile.gif to ten warunek ma sens w innym przypadku będzie zawsze spełniony.


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
panryz
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2010

Ostrzeżenie: (0%)
-----


ale argument 'twojastrona' jest tworzony przy przycisnieciu logowanie, i potem w pliku sprawdzania jest przypisany co zmiennej, i potem sprawdzam. moze zle mysle, to prosze mnie nakierowac
Go to the top of the page
+Quote Post
Shido
post
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 22
Dołączył: 22.06.2012

Ostrzeżenie: (0%)
-----


Ciasteczko może być tworzone przy kliknięciu, chodzi tu o cos innego.

isset sprawdza czy zmienna istnieje ( ciasteczko również jest zmienną ) i zwraca true/false.
w tej wersji:
  1. $ciastko = isset($_COOKIE['twojastrona']);

tutaj zmienna $ciastko zostanie stworzona i przyjmie wartość true lub false
  1. if(isset($ciastko))
  2. {
  3. }

a tutaj zaraz sprawdzasz czy $ciastko istnieje, a skoro stworzyłeś je przed chwilą to ono zawsze będzie istniało.

To juz ci wczesniej wytłumaczyli.
Co do tego:
  1. $ciastko = $_COOKIE['twojastrona'];
  2. if( isset( $ciastko ) ) {
  3. }

Sytuacja jest taka sama, $ciastko zostanie stworzone, więc isset też będzie zawsze dawał w tym przypadku true, nieważne że zmienna jest pusta.
W tym wypadku opcje sa dwie tak jak ci pokazali:
  1. if ( isset( $_COOKIE['twojastrona'] ) ) {
  2. $ciastko = $_COOKIE['twojastrona'];
  3. }


lub jżeli sie uparłes by pierw deklarować $ciastko:

  1. $ciastko = $_COOKIE['twojastrona'];
  2. if( !empty( $ciastko ) ) {
  3. }



--------------------
Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #7





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


Przeanalizuj kod na spokojnie.

  1. $query = "SELECT * FROM users WHERE haslo='$ciastko'";
  2. echo $query;


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #8





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(rocktech.pl @ 22.06.2012, 08:37:32 ) *
  1. /**
  2.  * @var boolean $ciastko zawsze równa się true lub false
  3.  */
  4. $ciastko = isset ( $_COOKIE['twojastrona'] );
  5. if ( isset ( $ciastko ) ) {
  6. /**
  7.  * To wyrażenie jest zawsze prawdziwe
  8.  */
  9. }

Bzdura, to wyrażenie nie będzie zawsze prawdziwe, nie słuchajcie go.

http://php.net/isset
Cytat
isset — Determine if a variable is set and is not NULL

AND IS NOT NULL!

Więc tutaj będzie true lub false w zależności czy taki klucz cookie istnieje.
Akurat w tej częsci kodu wszystko jest w porządku.


Ten post edytował wNogachSpisz 22.06.2012, 10:14:53
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@wNogachSpisz co ty za głupoty gadasz.... przeczytaj na spokojnie jeszcze raz posty wyjasniające i już się nie odzywaj bo leżysz na totalnych podstawach.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #10





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(nospor @ 22.06.2012, 10:59:36 ) *
@wNogachSpisz co ty za głupoty gadasz.... przeczytaj na spokojnie jeszcze raz posty wyjasniające i już się nie odzywaj bo leżysz na totalnych podstawach.

Sam leżysz w podstawach. Co w tym co napisałem jest nie tak?
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wiesz co.....
odpal sobie te dwa kody
  1. $ar = array();
  2. $zm = isset($ar['cos']);
  3. if (isset($zm)) echo 'wNogachSpisz się nie zna na rzeczy';
  4.  

  1. $ar = array('cos'=>1);
  2. $zm = isset($ar['cos']);
  3. if (isset($zm)) echo 'wNogachSpisz się nie zna na rzeczy';
A potem idź się doucz dlaczego dwa razy na ekranie zobaczyłeś swój nick...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rocktech.pl
post
Post #12





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


Spokojnie smile.gif

@wNogachSpisz

http://bd.php.net/manual/pl/function.isset.php

Cytat
Returns TRUE if var exists and has value other than NULL, FALSE otherwise.


isset zwróci zawsze true lub false!

A więc:
  1.  
  2. $ciastko = true;
  3.  
  4. if ( isset ( $ciastko ) ) {
  5. echo 'Zawsze prawdziwe';
  6. }
  7. $ciastko = false;
  8.  
  9. if ( isset ( $ciastko ) ) {
  10. echo 'Zawsze prawdziwe';
  11. }


Ten post edytował rocktech.pl 22.06.2012, 10:09:22


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #13





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(rocktech.pl @ 22.06.2012, 09:26:02 ) *
  1. $ciastko = $_COOKIE['twojastrona'];
  2. if( isset( $ciastko ) ) {
  3. }


Jeżeli chcesz sprawdzić czy interpreter działa poprawnie smile.gif to ten warunek ma sens w innym przypadku będzie zawsze spełniony.


Bzdura. Ten warunek NIE BĘDZIE zawsze spełniony.

I kto leży w podstawach?

@nospor
Dobrze ci radze, skasuj profil i przestań się dalej kompromitować.

Ten post edytował wNogachSpisz 22.06.2012, 10:10:34
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #14





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


No tak tu się zgodzę, że się zagalopowałem.

  1. $_COOKIE['twojastrona'] = null;
  2.  
  3. $ciastko = $_COOKIE['twojastrona'];
  4.  
  5. if( isset( $ciastko ) ) {
  6. echo 'true';
  7. }


Ten post edytował rocktech.pl 22.06.2012, 10:17:01


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Bzdura. Ten warunek NIE BĘDZIE zawsze spełniony.
LOL, przecież ty tym razem pokazałeś zupełnie inny kod, w którym oczywiscie nie zawsze będzie spełniony.... Ty nawet nie wiesz o jakim kodzie mowisz LOL


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #16





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(rocktech.pl @ 22.06.2012, 11:11:30 ) *
No tak tu się zgodzę , ze się zagalopowałem.

Nareszcie :-]

Może przejdźmy dalej z analizą kodu z pierwszego posta.

  1. $query = "SELECT * FROM users WHERE haslo='$ciastko'";
  2.  
  3. echo $query; // SELECT * FROM users WHERE haslo='1'

User zostanie zalogowany o ile jego hasło to "1".

Ten post edytował wNogachSpisz 22.06.2012, 10:19:56
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
No tak tu się zgodzę , ze się zagalopowałem.

Nareszcie :-]
No, skoro rocktech się przyznał do błędu a ty sie z tego tak cieszysz, to jeszcze ty się przyznaj. Bo póki co zrobiłeś to po cichu, edytując pierwszego posta smile.gif


Cytat
oże przejdźmy dalej z analizą kodu z pierwszego posta.

pobierz, plaintext
$query = "SELECT * FROM users WHERE haslo='$ciastko'";

echo $query; // SELECT * FROM users WHERE haslo='1'

pobierz, plaintext

User zostanie zalogowany o ile jego hasło to "1".
Wcale nie. Przyjąłes, że kod wygląda teraz tak:
  1. $ciastko = $_COOKIE['twojastrona'];
  2.  
  3. if(isset($ciastko)){

A skoro kod wygląda tak, to $ciastko nie zawiera 1 a zawiera hasło pobrane wcześniej z bazy (a przynajmniej powinno zawierać). Więc błąd jest w innym miejscu smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #18





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(nospor @ 22.06.2012, 11:25:05 ) *
A skoro kod wygląda tak, to $ciastko nie zawiera 1 a zawiera hasło pobrane wcześniej z bazy (a przynajmniej powinno zawierać). Więc błąd jest w innym miejscu smile.gif


No ok, czyli musimy w 13 linii dopisać:
  1. var_dump($query, $row);


Ten post edytował nospor 22.06.2012, 10:37:31
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
No ok, czyli musimy w 13 linii dopisać:
Nie koniecznie. Może się okazać że ciastko w ogóle nie jest tworzone (bo coś tam) i w ogóle w linie 13 kod nie wejdzie. Trzeba przeprowadzić normalną analizę, począwszy od włączenia wyświetlania wszystkich błędów, po kolejnym wyświetlaniu zmiennych.
Temat: Jak poprawnie zada pytanie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Shido
post
Post #20





Grupa: Zarejestrowani
Postów: 121
Pomógł: 22
Dołączył: 22.06.2012

Ostrzeżenie: (0%)
-----


Ogólnie logowanie tyko po haśle jest bee ( bo co gdy np. kilku userów ma to samo haslo? ).

Co do nietrzymania ciasteczek, może je wcale nie tworzy?
Wielokrotnie miałem z tym problemy, zawsze pomagało na początku całego kodu dać

a na końcu:


Z tego co pamiętam to sa jakis uchwyty, nigdy nie zagłębiałem się co to tak do końca jest, ale pomaga przy ciasteczkach smile.gif
Z drugiej strony pomaga to jak sie pojawiają Warningi, a tu nic o nich pisane nie było, ale spróbowac warto.

@down
Nie widziałem, zacząłem pisać zanim napisałeś posta, w miedzyczasie szukałem tych uchwytów to mi zeszlo trochę.

Ten post edytował Shido 22.06.2012, 10:50:59


--------------------
Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 02:29