Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Cookie i logowanie
stal-sw
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 27.06.2002
Skąd: Stalowa Wola

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


Mam skrypt do rejstracji uzytkownikow i mam jeden problem.

Ponizszy kod wykonuje formularz logowanie (login i password).
jednka chcialbym dodac jeszcze w formularzu logowaniu checkboxa po wcisnieciu ktorego cookie sa ustawiane np. na 100 dni - a tym samym jak dana osoba wjdzie na moja stronke bedzie pokazany napis "witaj LOGIN").

Co dopisac do ponizszego kodu aby zalatwic te sprawe.

Oraz jaki jeszcze zrobic skrypcik (aby po umieszczeniu w ktoryms miejscu na stronie) sprawdzal cookie i wyswietal albo: nie zalogowany albo witaj LOGIN.
Prosze o pomoc.

[php:1:0fbe713dbd]
<?

session_start(); // Start Session

include 'db.php';

$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
echo "Wypelnij formularze poprawnie! <br />";
include 'login_form.html';
exit();
}


$password = md5($password);


$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}

session_register('first_name');
$_SESSION['first_name'] = $first_name;
session_register('last_name');
$_SESSION['last_name'] = $last_name;
session_register('email_address');
$_SESSION['email_address'] = $email_address;
session_register('special_user');
$_SESSION['user_level'] = $user_level;

mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'");

header("Location: login_success.php");
}
} else {
echo "Nie mozesz zostac zalogowany - nieprawidlowe dane!<br />
Sproboj jeszcze raz!<br />";
include 'login_form.html';
}
?>[/php:1:0fbe713dbd]
Go to the top of the page
+Quote Post
dob
post
Post #2





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 30.01.2003
Skąd: Warszawa

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


[php:1:30e959528a]<?php
session_start(); // Start Session

include 'db.php';

$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
echo "Wypelnij formularze poprawnie! <br />";
include 'login_form.html';
exit();
}


$password = md5($password);


$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND
password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}

session_register('first_name');
$_SESSION['first_name'] = $first_name;
session_register('last_name');
$_SESSION['last_name'] = $last_name;
session_register('email_address');
$_SESSION['email_address'] = $email_address;
session_register('special_user');
$_SESSION['user_level'] = $user_level;

mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'");

//jeżeli zaznaczył pole to wysyłasz ciacho
if($_POST['chkbox']=='on'){
setcookie("ciastko", $username, time()+3600*24*30);
}

header("Location: login_success.php");
}
} else {
echo "Nie mozesz zostac zalogowany - nieprawidlowe dane!<br />
Sproboj jeszcze raz!<br />";
include 'login_form.html';
}
?>[/php:1:30e959528a]

teraz żeby na następnej stronie wyświetlić napis musisz sobie wrzucic taki kod :

[php:1:30e959528a]<?php
echo "Witaj ".$_COOKIE['ciastko']." !!";
?>[/php:1:30e959528a]


Teraz żeby wyswietlic albo niezalogowany albo witaj... musisz dac taki kod :
[php:1:30e959528a]<?php
if(isset($_COOKIE['ciastko'])){
echo "Witaj ".$_COOKIE['ciastko']." !!";
}else{
echo "Nie zalogowany!";
}
?>[/php:1:30e959528a]

Tylko teraz takie małe ale, jeżeli użytkownik nie zaznaczy tego pola to skrypt będzie mu pisał że jest nie zalogowany - bo nie zostanie wysłane do niego ciastko, to samo będzie w momencie kiedy użytkownik nie akceptuje ciastek. Moim zdaniem skoro wykorzystujesz sesje przy tym logowaniu to lepiej przekazywac nazwe użytkownika własnie sesją.
Go to the top of the page
+Quote Post
stal-sw
post
Post #3





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 27.06.2002
Skąd: Stalowa Wola

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


A czy takie rozwiazanie jest lepsze (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
[php:1:4f829fa467] <?
include 'db.php';
{
//sprawdzam, czy w ciasteczku sa odpowiednie dane
if ($_COOKIE['autolog'] && $_COOKIE['klucz']) {
//polaczenie z serwerem bazy danych zostalo juz wczesniej nawiazane
$zapytanie = "SELECT * FROM users WHERE username =
'".$_COOKIE['autolog']."' AND password = '".$_COOKIE['klucz']."'";
$wynikZapytania = mysql_query($zapytanie);
if (mysql_num_rows($wynikZapytania) == 1) {
//jezeli uzyskalem pozytywny wynik z bazy danych rejestruje uzytkownika
$_SESSION['username'] = $_COOKIE['autolog'];
echo "Witaj <b> ". $_SESSION['username'] ."</b><br><br />";
}
}
else {
//zwracam false gdyz uzytkownik nie moze zostac automatycznie zalogowany
echo"zle";
}
}
?>[/php:1:4f829fa467]
Go to the top of the page
+Quote Post
dob
post
Post #4





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 30.01.2003
Skąd: Warszawa

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


To co napisałeś jest jeszcze gorsze bo ktoś kto ma w przeglądarce ustawione blokowanie ciastek nigdy sie niedostanie na tą stronę.

Nie przechowuj niezakodowanego hasla użytkownika w ciastku .

Zrób tak że po prawidłowo wypełnionym formularzu i zaznaczonym czekboksie wysyłasz ciastko z np nazwą uzytkownika, zakodowanym hasłem i np jego id .

Na każdej stronie która ma byc dostępna dopiero po zalogowaniu, sprawdzasz czy nazwa uzytkownika (która jest w ciastku) i zakodowane hasło jest identyczne z zapisem w bazie (w celu sprawdzenia czy użytkownik jest jeszcze użytkownikiem twojego serwisu bo przez 30 dni może sie dużo zmienic) pod tym danym id, oraz czy nie ma zmiennych sesyjnych (bo jeżeli są to użytkownik jest juz zalogowany).

Jeżeli to wszystko sie zgodzi to rejestrujesz sesje i odswieżasz strone (potem sprawdzasz czy zmienne sesyjne zawierają to co powinny jak zawierają to wpuszczasz na strone jak nei to wysyłasz użytkownika do formularza logowania). Natomiast jeżeli nie ma ciastka to przenosisz headerem do strony z formularzem logowania.

Niewiem czy dobrze to wytlumaczyłem , nigdy jeszcze nie robilem systemu logowania na sesjachz zapamietaniem uzytkownika , ale chybapowinno działać
Go to the top of the page
+Quote Post
stal-sw
post
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 27.06.2002
Skąd: Stalowa Wola

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


Ciastko tworze w nast. sposob:
[php:1:ebfa52150b]{
if ($_POST['autolog'] == 'on') {
//ustawiam ciastko o nazwie uzytkownika na jeden miesiac
setcookie('autolog', $_POST['username'], time() + 2592000);
setcookie('klucz', md5($_POST['password']), time() + 2592000);
[/php:1:ebfa52150b]
Czyli zakodowane.

Zas to tego rozwiazania na gorze dodam tyko to ze jezeli nie znajdziemy ciastka to pokazuje sie formularz logowania.
Go to the top of the page
+Quote Post
saint99
post
Post #6





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 18.03.2004
Skąd: Brzozów

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


Mógłby ktos kto sie na tym dobrze zna zebrać to do kupy (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) bo ja się dopiero uczę php ... :oops: Bardzo proszę niech ktoś pokaże jak powinien wyglądać cały skrypt (również nazwy plików).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 21:01