[PHP/MySQL]problem z cookie w skrypcie logowania

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
majcok
Posty: 6
Rejestracja: wt lis 02, 2004 3:40 pm

[PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: majcok »

Mam problem z logowaniem,(wersja skryptu ponizej jest z uzyciem cookie [aby po zalogowaniu sie nie trzeba bylo sie ponownie logowac gdziekolwiek na stronie przez 24h], ale przed wprowadzeniem cookie skrypt dzialal i mnie logowal). Jednak teraz gdy wpisze dane i wysle formularz, pojawia sie komunikat o blednym loginie i hasle (mimo ze podaje poprawne dane, ktora sa w bazie.

ponizej zawartosc register.php:
[php]
<?
session_start();
include("common.php");
global $id_polaczenia;
$id_polaczenia = db_connect();

if (!isset ($_POST["user_nick"]) && !isset ($_POST["user_password"]) && !$_SESSION["usernick"] && !$_SESSION["userpassword"]){
        html_header();
        ?>
</TR>...
//formularz logowania
...  </form>
    <?php
        html_footer();

}
else
        setcookie ("user_id", "$_POST[user_nick]", time()+86400);
        setcookie ("user_pass", "$_POST[user_password]", time()+86400);

        $_SESSION["usernick"] = strtolower(trim($_COOKIE['user_id']));
        $_SESSION["userpassword"] = trim($_COOKIE['user_pass']);

     $zapytanie = mysql_query("SELECT user_nick, user_pass, admin FROM users WHERE user_nick ='$_SESSION[usernick]'");

     $user = mysql_fetch_array($zapytanie);

     if ($_SESSION["usernick"] == strtolower($user["user_nick"]) && $_SESSION["userpassword"] == $user["user_pass"] && $user["admin"] == "TAK"){

global $id_polaczenia;
$id_polaczenia = db_connect();

function in_use($user_nick) {
global $user_tablename;
$query = "SELECT user_nick FROM $user_tablename WHERE user_nick = '$user_nick'";
$wynik = mysql_query($query);
if (!mysql_num_rows($wynik)) return 0;
else return 1;
}
        
         function reg_form() {
html_header();
?>
<TR>.....
// formularz rejestracji
...</form>
<?php
echo "  <a href=\"$PHP_SELF?action=logout\"><font style=\"font-family: Verdana; font-size: 9px;\"><b>Wyloguj</b></a><br>\n";
html_footer();
         }

function register_user() {
global $id_polaczenia;
global $nick, $userpassword, $userpassword2, $usermail, $userprofile, $userhardware, $admin;
global $default_db, $user_tablename;
$awatar = "obrazki/users/none.jpg";

mailcheck ($usermail);
if (empty ($userprofile) ) error_message ("Brak komentarza!");
if (empty ($usermail) ) error_message ("Brak adresu email!");
if (empty ($nick) ) error_message ("Brak nicku!");
if (empty ($userpassword) ) error_message ("Brak hasla!");
if (empty ($userpassword2) ) error_message ("Musisz powtórzyć hasło!");
if ($userpassword! = $userpassword2) {
error_message ("Podane hasła nie są identyczne");
}

if (in_use ($nick) ) {
error_message ("Wybrany nick jest już zajęty, proszę wybrać inny");
}

             $query = "INSERT INTO users VALUES(NULL, '$nick', '$userpassword', '$usermail', '$userprofile', curdate(), NULL, '$userhardware', '$awatar', '$admin')";

$wynik = mysql_query ($query);
if (!$wynik) error_message (sql_error());

html_header();
?>

<b>Użytkownik <?php echo $nick ?> został zarejestrowany</b>

<?php
html_footer();
         }
           switch ($action) {
case "register_user":
register_user();
break;
case "logout":
logout();
break;
default:
reg_form();
break;
         }

        }


else {
session_unregister("usernick");
session_unregister("userpassword");
setcookie ("user_id");
setcookie ("user_pass");
          echo "zly login lub haslo";
         echo "<a href=\"$PHP_SELF\">Logowanie</a><br>";
}
    
?>
[/php]

funcja logout(), znajdujaca sie pliku common.php:
[php]
<?
function logout() {
    if($_COOKIE['user_id'] && $_COOKIE['user_pass']) {
        setcookie ("user_id");
        setcookie ("user_pass");
session_unregister("userpassword");
session_unregister("usernick");
        error_message("Zostałeś wylogowany");
        header ("Location: index.php");    
    }
}
?>[/php]

thx

PS. Jesli by ktos wiedzial co jest nie tak z tym skryptem to prosze o pw/odpowiedz na tamtym forum/gg (1661185)/lub ewentualnie w tym temacie http://forum.php.pl/index.php?showtopic=22285

pzdr
Ostatnio zmieniony wt lis 02, 2004 9:15 pm przez majcok, łącznie zmieniany 7 razy.
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: the_foe »

o boshe, co to jest? ;)
niezle umiesz komplikowac skrypt... wyglada jak szyfr lub cos podobnego :)


nie chce mi sie to analizowac, szkoda czasu... ale zle zapisujesz cookie
majcok
Posty: 6
Rejestracja: wt lis 02, 2004 3:40 pm

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: majcok »

the_foe pisze:.. ale zle zapisujesz cookie
Dlaczego?
[php]
<?
setcookie ("ciag uzywany jako nazwa zmiennej", "ciag bedacy wartoscia zmiennej", czas po ktorym wygasnie waznosc cookie);
setcookie ("user_id", "$_POST[user_nick]", time()+86400);
//probowalem tez tak
setcookie ("user_id", $_POST["user_nick"], time()+86400);
?>
[/php]

PZdr
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: the_foe »

ta druga forma jest na 100% dobra co do pierwszej, nigdy tak tego nie zapisywalem, ale podejrzewam ze cookie zapisalby wartosc "$_POST[costam]'" zamiast jej wartosci
majcok
Posty: 6
Rejestracja: wt lis 02, 2004 3:40 pm

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: majcok »

Hm.. wiec w czym moze tkwic problem, jesli ta druga forma jest w 100% poprawna (obecnie wlasnie setcookie mam w tej drugiej formie)?
Ja_Szczur
Posty: 14
Rejestracja: pn paź 04, 2004 2:39 pm
Lokalizacja: Strzyżów
Kontakt:

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: Ja_Szczur »

Może to:

[php]<?php
setcookie ("user_id", "$_POST[user_nick]", time()+86400);
setcookie ("user_pass", "$_POST[user_password]", time()+86400);

$_SESSION["usernick"] = strtolower(trim($_COOKIE['user_id']));
$_SESSION["userpassword"] = trim($_COOKIE['user_pass']);
?>[/php]

$_COOKIE['user_id'] jest dostępne dopiero po przeładowaniu strony.
semix
Posty: 13
Rejestracja: wt paź 26, 2004 9:19 am

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: semix »

po co tak kombinować ?

hyba tak wystarczy:

[php]<?php
setcookie("jakas zmienna", "$user_login czy cos tam", time() + 3600);
?>[/php]
Vic
Nowy
Nowy
Posty: 171
Rejestracja: sob mar 13, 2004 1:55 pm
Lokalizacja: Warszawa
Kontakt:

Re: [PHP/MySQL]problem z cookie w skrypcie logowania

Post autor: Vic »

Rzeczywiście trochę nagmatwane...
A to co miałem napisać napisał Ja(ten)szczur.
ODPOWIEDZ