Prijava ( ostani prijavljen )

Pozdravljeni,

že nekaj časa se lovim pri prijavi, saj mi nikakor ne uspe narediti tako, da ko zapustim brskalnik in ga ponovno zaženem, da je uporabnik še vedno prijavljen. Cookie mi naredi v brskalniku. Ima mogoče kdo kakšno rešitev, kako bi lahko to rešil?

Ob prijavi se izvede naslednja koda

session_register("uporabnisko_ime");
session_register("geslo");
setcookie("prijava", $uporabnisko_ime, time()+3600);
$_SESSION['uporabnisko_ime'] = $uporabnisko_ime; // PRENESE UPORABNIŠKO IME NA DRUGE STRANI
$uporabnik_prijavljen_uporabnisko_ime = "1";
$uporabnik_prijavljen_geslo = "1";
$_SESSION['uporabnik_prijavljen_uporabnisko_ime'] = $uporabnik_prijavljen_uporabnisko_ime;
$_SESSION['uporabnik_prijavljen_geslo'] = $uporabnik_prijavljen_geslo;
header("location:../index.php");

Hvala za pomoč.

6 odgovorov

Lep pozdrav.
Prvo poglej same nastavitve na platformi in sicer v komponenti,vtičniku ali v modulu sicer nevem kaj uporabljaš,nato poglej nastavitve samega brskalnika če ti sploh shrani uporabniško ime in geslo.

1

Session za svoje delovanje ustvari svoj piškot, ki nima veze s piškotom, ki ga sam narediš.
session_register je čudno... verjetno zastarelo.. nisem nikjer še videl.

Ko zapreš brskalnik je seja uničena saj je seja php seja na strežniku in je z uporabnikom povezana preko piškotka, lahko pa tudi ne če se tako nastavi.
http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/

Za "remember me" funkcijo si moraš narediti nov piškot in ga nastaviti v primeru, da je uporabnik kliknil checkbox remember me.

Vanjga lahko shraniš nek string po katerem boš vedel, da gre za tega uporabnika.
Ko se uporabnik ki si je prej nastavil, da se bo zapomnil pojavi na strani se preveri ali ima ta piškot in kakšna je vrednost.

Če ga ima in če se vrednost ujema z vrednostjo v bazi, se ga prijavi.
http://blog.themeforest.net/tutorials/working-with-sessions-and-cookies-in-php-and-mysql/

2

Hvala za pomoč odgovora sta mi zelo pomagala razčistiti par stvari :).

Potreboval bi pa še en nasvet... Zadevo sem spisal malce drugače in nekako deluje vendar me zanima ali bi bilo tako vredu ali bi mogel kaj spremeniti. To kodo uporabljam ko, vpišem uporabniško ime ( za preverjanje podatkov, če ta uporabnik obstaja ).

<?php

$uporabnisko_ime_piskotek = $_COOKIE['prijava'];
$kodirano_geslo_piskotek = $_COOKIE['geslo'];
mysql_connect($server, $ime_baze, $geslo_baze) or die(mysql_error());
mysql_query("SET NAMES 'UTF8'");

mysql_select_db($ime_baze) or die(mysql_error());


   $preveri_bazo = mysql_query("SELECT * FROM $prijava_tabela WHERE uporabnisko_ime = '$uporabnisko_ime_piskotek' and geslo = '$kodirano_geslo_piskotek'")or die(mysql_error());
   $preveri_bazo_podatki = mysql_fetch_array( $preveri_bazo );

        echo $preveri_bazo_podatki[uporabnisko_ime];
        echo $preveri_bazo_podatki[geslo];

if($preveri_bazo_podatki[uporabnisko_ime] and $preveri_bazo_podatki[geslo])

{
echo "Je";
print_r($_COOKIE);
}
else
{
echo "Ni";
print_r($_COOKIE);
}
?>

Ni za kaj samo da si rešil zadevo in da deluje.

Upam da dela... Moram pa te popravit v stilu kode...

Si me spomnil na jutrišnji dan... Sam popravljam sistem, ki je napisan s tako kodo za eno "zavarovalnico" in si želim, da bi lahko ubil programerja, ki jo je pisal pred mano. Ko imaš 5000 vrstic take kode v controlerju, model pa prazen postane zanimivo. Še bojše pa postane, ko si za njih nov in ti nihče ne zaupa in se moraš "izkazat" s hitrostjo in kvaliteto... Na koncu pa lahko celo odletiš ti, ker nisi mogel v pravem času dokončat projekta a za to sploh nisi kriv.

Namesto mysql_query uporabljaj PDO.
http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
V to kodo bi ti lahko naredil sql injection.
Nikoli ne izbiraš SELECT *... ampak samo to kaj potrebuješ.

$prijava_tabela ... Ta vzorec si mi pojavlja tudi v moji kodi in mi gre najbolj na živce..
Ko iščeš med 5000 vrsticami in ne najdeš takoj imena tabele in zakaj je tako narejeno, ker so imena tabel skrita pod spremenljivkami...
Zmeraj piši jasne SQL stavke iz katerih je takoj vidno kaj hočeš. Ne sestavljaj SQL stavkov in ne skrivaj dele za spremenljivkami.

?> Zaključek ?> na koncu ni potreben in ga lahko izpustiš.

Jaz bi dal if(isset($preveribazopodatki[uporabniskoime]) && !empty($preveribazopodatki[uporabniskoime]) && isset($preveribazopodatki[geslo]) && !empty($preveribazopodatki[geslo])

Da bi se takoj vidlo...

1

1.

Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used.

dravasoft.com:
Jaz bi dal if(isset($preveribazopodatki[uporabniskoime]) && !empty($preveribazopodatki[uporabniskoime]) && isset($preveribazopodatki[geslo]) && !empty($preveribazopodatki[geslo])

Če isset vrne false je zmeraj tudi empty true torej je empty sam čisto dovolj.

1