Pereiti prie turinio

Kaip sunaikinti sesijos cookie


Rekomenduojami pranešimai

labas, dar niekada nesu to daręs, todėl nežinau kaip tai veikia. turiu sistemą:

 

jei yra sukurtas cookie "user", tave meta į puslapį, kur tikrina info, šiuo atveju pas mane checker.php, jei nesukurtas, meta į start puslapį. Tame check.php puslapyje tikrina duomenis: jei toks cookie nesukurtas, grąžina į index, kur vėl tikrina cookius, jei toks cookie yra, ima duomenis iš mysql ir tikrina, ar toks vartotojas yra, ar sesijos id(kuri suformuoja sausainėlį PHPSESSID kas kart, kai tik pradedama session_start();) yra to vartotojo, kuris įrašytas į sausainėlį "user" ir ar tokia sesija($_COOKIE['PHPSESSID']) išvis yra, tiksliau ar sukurta. Jei kažkas ne taip, grąžina į index, kur vėl tikrina cookius.

 

Reikalas tas, kad kažkodėl, jei ištrinu sesijos id iš cookie(susikuria naujas sesijos id ir mysql'e jau yra kitoks) turėtų mesti į start puslapį, bet rodo, kad puslapis buvo "Serveris cikliškai peradresuoja šio adreso užklausą. Toks peradresavimas yra begalinis." Kiek suprantu, meta atgal į puslapį, kur tikrina duomenis, ten vėl sesija neatinka, vėl meta į index, ten vėl į ten check ir t.t..

 

Dametu kodą, gal kas pamatę ką galėsit kuo padėt? :unsure:

 

session_start();

// Prisijungiam prie DB //
$link = mysql_connect('localhost','*','*');
mysql_select_db("*",$link);  
//--------------------------

	//-------------------------------------------//

$user = mysql_real_escape_string($_COOKIE['user']);
$sesid = mysql_real_escape_string($_COOKIE['PHPSESSID']);

	//-------------------------------------------//

if(!$user) { $error = "Neįvestas prisijungimo vardas"; }
if(!$sesid) { $error = "Sesija nebegalioja"; }

function existing($user,$what){
   $query = mysql_query("SELECT id FROM users_main WHERE $what='$user'");
   if(mysql_num_rows($query) < 1)return false;
   return true;
}		
function check_info($user,$what,$atribute) {

$query = mysql_query("SELECT * FROM users_main WHERE username = '$user'");
$array = mysql_fetch_array($query);

	if($array[$what] != $atribute)return false;
	return true;
}

	if(existing($user,'username') == false) { $error = "Tokio vartotojo savo duomenų bazėj neturime"; }
	if(check_info($user,'sesid',$sesid) == false) { $error = "Įvesta info yra neteisinga"; $sql = 'UPDATE `users_main` SET `sesid` = \'\' WHERE `username` = \''.$user.'\''; mysql_query($sql) or die(mysql_error()); }


		if(isset($error)) {	

			setcookie("user", "", time()-604800);
			unset($_COOKIE['user']);

			header("Location: http://$home/start");


		} else {

//----- Updatinam info, tikrinam ir t.t -----------//


			$sql = 'UPDATE `users_main` SET `sesid` = \''.$sesid.'\' WHERE `username` = \''.$user.'\'';

			mysql_query($sql) or die(mysql_error());	

		}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

nerekomenduoju cookyje laikyt username :) nes pakeiti cookie username i kito nario, ir gausi visa kito anrio info :)

tai juk prie info galima prieiti tik tada, jei visi duomenys bus teisingi. o jie bus teisingi tik tuo atveju, jei sesijos id sutaps jau įrašytu sesijos id arba žinos slaptažodį.

 

unset($_SESSION); // sessija
setcookie("cookie_name", "", time()-3600); //sausainis

tai nepadeda, čia tas reikalas, kad jei ištrinu sesijos cookie iš naršyklės, o palieku user sausainį, atlieka tikrinimą ir priima, kad esamas sesijos id neatitinka sesijos id, kuris įrašytas į db, ir vėl trukt už vadžių, vėl iš pradžių. Nors čia turėtų panaikinti sausainį USER ir tada jau netikrinti to veiksmo, bet kažkodėl to sausainio nenaikina, nežinau dėl ko čia taip

 

 

išsiaiškinau, kad netrina to cookio, dėl to viskas taip ir gaunasi. kitaip tariant palieka galiojantį cookie "user" ir dėl to tikrina ar sesijos id sutampa su į db įrašyta sesijos id ir aišku nesutampa, dėl to daro redirectus. Bet dėl ko gali netrinti neįsivaizduoju, prieš tai maniau, kad klaida ta, kad pirma redirectinu, o tik paskui trinu cookį, bet perdarius sciptą klaida išlieka, bandysiu išsiaiškint dėl ko. Mačiau kituose forumuose ir kitiems taip buvę, bet taip ir neparašė, ką darė, kad sutvarkytų. kodo fragmentas, kuris neveikia

 

if(check_info($user,'sesid',$sesid) == false) $error = "Sesijos galiojimo laikas baigėsi";		
if(existing($user,'username') == false) $error = " Tokio vartotojo mūsų sistemoje nėra";	
if(empty($sesid)) $error = " Sesijos galiojimo laikas baigėsi";
if(empty($user)) $error = " Neįvestas vartotojo vardas";

if(!empty($error)) {

unset($_SESSION); // sessija
setcookie("user", "", time()-3600); //sausainis

$cc.= "klaida, $error";
header("Location: http://*.lt");



} else {

$cc.= "viskas ok";

}

 

probelemą suradau, sprendimas: reikia nurodyti sausainio kelią, kur jsi susikūrė, nes jei jis bus sukurtas ne ten, kur naikinamas, tai ir nesunaikins, ar kažkas panašaus..

 

$name = "user"; $value = ""; $path = "/"; $expire = "0";
setcookie($name, $value, $expire, $path)

Redagavo gio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...