Avatar billede Slettet bruger
27. maj 2009 - 23:13 Der er 22 kommentarer og
1 løsning

Problem med cookies på et andet webhotel

Godaften eksperter.. Jeg er løbet ind i et meget irriterende problem som jeg gerne skal prøve at løse hurtigst muligt. Jeg er i gang med mit afsluttende eksamensprojekt, hvor jeg står og skal aflevere projektet på fredag. Jeg har programmeret en hjemmeside, hvor man kan benytte sig af en husk-mig funktion (med cookies) til at logge ind. Dette fungerer også som det skal både på localhost og på mit eget webhotel. Men når jeg uploader til skolens server får jeg et par underlige fejlmeddelelser.

Når man åbner min side uden at være logget ind på forhånd med cookies udskriver den nedenstående i bunden af hver side. Hvis man logger ind med cookies forsvinder beskeden dog, men hvis man logger ind uden cookies forbliver fejlmeddelelsen på siden:

------------------------------------------------------------------------------------------------------
PHP Notice: Undefined index: login in G:\sites \includes\config.cookies.php on line 4
------------------------------------------------------------------------------------------------------

Hvis man logger ind med cookies og derefter logger ud igen får man desuden denne fejl i bunden af hver side:

------------------------------------------------------------------------------------------------------
PHP Notice: Undefined offset: 1 in G:\sites \includes\config.cookies.php on line 7 PHP Notice: Undefined offset: 2 in G:\sites\includes\config.cookies.php on line 8
------------------------------------------------------------------------------------------------------

Det underlige er at cookie-scriptet virker som det skal, til trods for at det udskriver disse to fejlmeddelelser. Men hvordan kan det være at det udskriver disse meddelelser på skolens server, når den ikke gør det på mit eget webhotel, samt localhost?

Min config.cookies.php ser ud som her:

------------------------------------------------------------------------------------------------------
<?php
    if($_COOKIE['login']){
        $info = explode('<br/>',$_COOKIE['login']);
        $username = mysql_escape_string($info[0]);
        $random = mysql_escape_string($info[1]);
        $expire = mysql_escape_string($info[2]);
   
    if($username && ($username == htmlentities($username)) && $random && $expire){
        $query = "SELECT * FROM `members_cookies` WHERE `user` = '$username' AND `random` = '$random' AND `expire` = '$expire'" or die(mysql_error());
        $result = mysql_query($query);
        if(mysql_num_rows($result) >= 1){
            while($r=mysql_fetch_array($result)){
                $username_db= mb_strtolower($r["user"]);
                $random_db=$r["random"];
                $expire_db = $r["expire"];
                $uid_db = $r["uid"];
                }
            $result = mysql_query("SELECT * FROM `members_regi` WHERE `username` = '$username' AND `id` = '$uid_db'") or die(mysql_error());
            if(mysql_num_rows($result) >= 1){
                $login = false;
                if (($expire_db == $expire) && $expire > time()){
                    $login = true;
                }
                      if ($login == true) {
                          $_SESSION['SESS_USERNAME'] = "$username";
                          $_SESSION['SESS_MEMBER_ID'] = "$uid_db";
                      }
            }
        }
    }
    }
?>

------------------------------------------------------------------------------------------------------
Avatar billede showsource Seniormester
27. maj 2009 - 23:27 #1
Prøv
if(isset($_COOKIE['login'])){
Avatar billede showsource Seniormester
27. maj 2009 - 23:29 #2
Eller,
<?php
ini_set('error_reporting', EE_ALL & ~E_NOTICE);

// resten af din side .....
Avatar billede Slettet bruger
27. maj 2009 - 23:38 #3
Fantastisk at det kunne løses så enkelt.. Det første svar virkede, så jeg takker mange gange ;)

Smid et svar så du kan få points
Avatar billede Slettet bruger
27. maj 2009 - 23:46 #4
Bah... Jeg var desværre lidt for hurtigt ude.. Første fejl blev fjernet men får stadig følgende fejl når man logger ind med cookies og derefter logger ud igen:

PHP Notice: Undefined offset: 1 in G:\sites\includes\config.cookies.php on line 7 PHP Notice: Undefined offset: 2 in G:\sites\includes\config.cookies.php on line 8

Du kan vel ikke se hvordan jeg løser det :D ?
Avatar billede mstorgaard Praktikant
28. maj 2009 - 00:42 #5
if($username && ($username == htmlentities($username)) && $random && $expire){

rettes til

if(isset($username) && ($username == htmlentities($username)) && isset($random) && isset($expire)){

(samme fejl som den første, tror jeg)
Avatar billede Slettet bruger
28. maj 2009 - 00:56 #6
Det ændrede desværre ikke på noget mstorgaard :/
Avatar billede mstorgaard Praktikant
28. maj 2009 - 01:02 #7
Når ja, med visse indstillinger kan den ikke lide at variabler i forhold til hinanden, hvis den ene variabel ikke eksisterer, som fx med $username == htmlentities($username), hvis $username ikke eksisterer.

Nogen mulighed for at du kan smide $username == htmlentities($username) ind i en if-sætning indeni den første, så du kun kører den, HVIS $username-variablen eksisterer?
Avatar billede Slettet bruger
28. maj 2009 - 01:37 #8
Ved ikke helt.. Jeg prøvede med noget så simpelt som:

if(isset($username))
{
  if($username == htmlentities($username) && $random && $expire){
  ......

Men det gav samme udslag :S
Avatar billede Slettet bruger
28. maj 2009 - 01:53 #9
Og ligeledes med:

if(isset($username))
{
  if($username == htmlentities($username) && isset($random) && isset($expire)){
  ......

Men desværre også med samme udslag :/
Avatar billede mstorgaard Praktikant
28. maj 2009 - 02:21 #10
Et lille forsøg:
if(strlen($username) > 0))
i stedet for
if(isset($username))
Avatar billede Slettet bruger
28. maj 2009 - 02:47 #11
Desværre heller ingen succes med det :(
Avatar billede mstorgaard Praktikant
28. maj 2009 - 02:53 #12
Problemet ligger tydeligvis i at du forsøger at bearbejde variablen $username, som ikke eksisterer.

Hvad hvis du definerer $username som null i starten af din fil?
Avatar billede Slettet bruger
28. maj 2009 - 03:04 #13
Ja okay.. Men igen - desværre det samme resultat :(
Avatar billede mstorgaard Praktikant
28. maj 2009 - 03:09 #14
Så prøver vi den kedelige løsning. Hvad sker der, hvis du sætter dette øverst i din fil (lige efter <?php)?
error_reporting(0);
Avatar billede Slettet bruger
28. maj 2009 - 03:48 #15
Så forsvinder fejlen godt nok, men som du selv siger så er det lidt den kedelige løsning og vil gerne løse problemet på en "bedre" måde, hvis det kan lade sig gøre :)
Avatar billede mstorgaard Praktikant
28. maj 2009 - 03:52 #16
Ideen er at variablen $username meget gerne skal eksistere før php vil bearbejde den, problemet er så, hvordan vi får tjekket det eller ændret på dens indhold, inden vi bearbejder den. Jeg kan ikke umiddelbart se en løsning.
Avatar billede showsource Seniormester
28. maj 2009 - 06:44 #17
Nu fik jeg lige kikket lidt på din kode:
Jeg mener ikke du kan gemme <br/>, og så blot hente det igen.
D.v.s du får aldrig $info til at være 3 ialt.

En hurtig løsning kunne måske være at tælle $info, og hvis den er 3, så køre viderer med scriptet.


Prøv evt. at se her:

<?php

setcookie("login[username]","showsource",0,"/");
setcookie("login[random]","random",0,"/");

echo"<pre>";
print_r($_COOKIE);
echo"</pre>";

if(empty($_COOKIE["testcookie"]))
{
echo"cookie 'testcookie' er ikke sat!<p>";
}

if(!empty($_COOKIE["login"]))
{
extract($_COOKIE["login"]);

echo "\$username er ".$username.", \$random er ".$random;

// brug derefter mysql_real_escape_string($username) o.s.v. når du vil lave opslag i db
}


?>
Avatar billede showsource Seniormester
28. maj 2009 - 06:52 #18
Lidt bedre:

setcookie("login[0]","showsource",0,"/");
setcookie("login[1]","random",0,"/");

if(!empty($_COOKIE["login"]) && count($_COOKIE["login"]) == 2)
{

$username = $_COOKIE["login"][0];
$random = $_COOKIE["login"][1];

echo "<p>\$username er ".$username.", \$random er ".$random;

}
Avatar billede Slettet bruger
28. maj 2009 - 07:47 #19
Det forstår jeg bare ikke helt, for hvis den ikke gemte <br/>'s og hentede igen, så ville den vel ikke kunne løbet scriptet igennem ordenligt og få cookies til at virke efter hensigten?

For sciptet virker jo som det skal, bortset fra at det udskriver den underlige fejl når man logger ud :D
Avatar billede Slettet bruger
28. maj 2009 - 17:07 #20
Det virker godt nok mystisk for jeg kan nu se at det ikke kun er cookie scriptet der driller.. Flere steder på siden melder den fejl om undefined index til trods for at jeg ikke har haft problemer med det før :|

Kan det have noget med skolens server indstillinger at gøre?
Avatar billede Slettet bruger
05. juni 2009 - 15:13 #21
Hvis i gerne vil ha' points må i lige smide et svar ;)

Jeg fandt ikke en decideret løsning på problemet udover den kedelige med: error_reporting(0);

Men jeg tror bestemt at det havde noget med skolens servere at gøre, da jeg ikke har haft problemer på andre webhoteller før :S
Avatar billede showsource Seniormester
05. juni 2009 - 21:23 #22
"rewrite" af al kode vil sikkert løse det.
Ingen point til mig .....
Avatar billede Slettet bruger
11. juni 2009 - 23:41 #23
lukker tråden igen så ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester