Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: znikajace(?) cookies
Forum PHP.pl > Forum > PHP
rmn
Moj problem:
Stworzłem funckje autologowania, która opiera sie na mechanizmie cookies. Problem polega na tym, ze NIEKTORYM uzytkownikom funkcja ta przestaje po JAKIM NIEOKRESOLONYM czasie działac.. czy ktos kiedys spotkal sie z takimi objawami, co to moze byc?

ps. wiecie moze jak zmusic przegladarke do wyswietlenia monitu o zapamietania hasla?
Cross
hm... nikt z nas nie jest jasnowidzem jak mamy ci pomóc skoro nie podasz nawet kodu smile.gif ?
rmn
co tu duzo pisac.. racja:)
wiec oto kody
[php:1:4bb92d0176]<?php

//sprawdzanie czy ciasteczko jest
if(isset($_COOKIE['auto']))
{

$auto = $_COOKIE['auto'];
$nick = $auto['one'];
$mdPass = $auto['two'];

if(mdAuth($nick, $mdPass)==1)
{
session_start();

MakeLog($nick);

$User = new User($nick);
$_SESSION['User'] = $User ;

header("Location: http://frmn.bounceme.net");
}
else
{
$error = Auth($nick, $password);
echo "<div id='content' style='text-align:center;vertical-align:middle;'>
<SCRIPT LANGUAGE="JavaScript">

function redirect()
{
document.location.replace('?act=login&act=showloginform');
}

setTimeout('redirect()', 2000);

</SCRIPT>
<span id='error'>$error</span></div>";
}

?>[/php:1:4bb92d0176]
i stawianie ciasteczka:

[php:1:4bb92d0176]<?php
if(($User->auto_login)&&(isset($_COOKIE['auto']))&&($auto==0))
{
setcookie("auto[two]", "", time() - 3600, "/", "frmn.bounceme.net");
setcookie("auto[one]", "", time() - 3600,"/", "frmn.bounceme.net");

$result = mysql_query("UPDATE users SET auto_login = 0 WHERE nick = '$User->nick'");
}
if((!$User->auto_login)&&!(isset($_COOKIE['auto']))&&($auto==1))
{

$row = mysql_fetch_row(mysql_query("SELECT password FROM users WHERE nick='$User->nick'"));
$pass = $row[0];

setcookie("auto[two]", $pass, time() + 3600*24*730,"/", "frmn.bounceme.net");
setcookie("auto[one]", $User->nick, time() + 3600*24*730,"/", "frmn.bounceme.net");

$result = mysql_query("UPDATE users SET auto_login = 1 WHERE nick = '$User->nick'");
}
?>[/php:1:4bb92d0176]

sprawdzilem juz ze na komputerach na ktorych byly ciasteczka juz ich nie ma.. a expire time napewno jeszcze nie nastal..

kod do stawiania cisteczek jest dosc skomplikowany poniewaz caly system ma dzialac tak iz autolowanie moze byc jednoczesnie wlaczone tylko na jednym komputerze(forma zabezpieczenia)

$User to klasa uzytkownika w profilu ktorego 'mieszamy'smile.gif

ps $auto = $_GET['auto'];
Kinool
[php:1:1b8ff88b83]<?php
setcookie("auto[two]", "", time() - 3600, "/", "frmn.bounceme.net");
?>[/php:1:1b8ff88b83]

a nie powinno byc przypadkiem:
[php:1:1b8ff88b83]<?php
setcookie("auto[two]", "", time() + 3600, "/", "frmn.bounceme.net");
?>[/php:1:1b8ff88b83]

questionmark.gif jak stawiasz - to odejujesz od aktualnego czasu wiec cookie dziala do momentu bycia na stronie (a moze i nawet nie)
chyba ze zadaniem tego jest usuwanie cookie u klienta

pozatym nie jestem pewien czy
[php:1:1b8ff88b83]<?php
setcookie("auto[two]", $pass, time() + 3600*24*730,"/", "frmn.bounceme.net");
//nie jestem pewnien czy tak mozna tworzyc tablice
?>[/php:1:1b8ff88b83]
zapisze to jako wartosc tablicy, bo potem odwolujesz sie do tego jak do tablicy!


nie lepiej byloby zrobic tak:
[php:1:1b8ff88b83]<?php
$auto[one]="costam";
$auto[two]="costam2";
setcookie("auto",$auto, time()+3600*24*730,"/", "frmn.bounceme.net");
?>[/php:1:1b8ff88b83]
rmn
co do tego co robi kod.. to ta czesci:
[php:1:e652834e0b]<?php
if(($User->auto_login)&&(isset($_COOKIE['auto']))&&($auto==0))
{
setcookie("auto[two]", "", time() - 3600, "/", "frmn.bounceme.net");
setcookie("auto[one]", "", time() - 3600,"/", "frmn.bounceme.net");

$result = mysql_query("UPDATE users SET auto_login = 0 WHERE nick = '$User->nick'");
}

?>[/php:1:e652834e0b]
usuwa cisteczko a ta:
[php:1:e652834e0b]<?php
if((!$User->auto_login)&&!(isset($_COOKIE['auto']))&&($auto==1))
{

$row = mysql_fetch_row(mysql_query("SELECT password FROM users WHERE
nick='$User->nick'"));
$pass = $row[0];

setcookie("auto[two]", $pass, time() + 3600*24*730,"/", "frmn.bounceme.net");
setcookie("auto[one]", $User->nick, time() + 3600*24*730,"/", "frmn.bounceme.net");

$result = mysql_query("UPDATE users SET auto_login = 1 WHERE nick = '$User->nick'");
}

?>[/php:1:e652834e0b] stawia cookie

wszystkim steruje zmienna $auto ktora jest pozyskiwana z formularza(uzytkownik zaznacza czy chce miec wlaczone autologowanie)

co do drugiej uwagi to: Manual:
Cytat
setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {
  while (list ($name, $value) = each ($cookie)) {
      echo "$name == $value&lt;br>n";
  }
}
[/manual]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.