Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 11:44 Der er 37 kommentarer og
1 løsning

Sessions bliver ikke "oprettet" før 2. forsøg?

Hejsa eksperter!

Jeg er igang med at udvikle en hjemmeside, hvor jeg har brug for at gemme nogle data i sessions. Derfor har jeg, i min "config.php"-fil (som er inkluderet først i alle dokumenter) indsat følgende linje:

session_start();

Problemet er dog, at når jeg kommer ind på siden for første gang, og fx. forsøger at logge ind, så kræver det altid 2 forsøg; første gang sker der ikke noget, udover jeg bliver redirected til forsiden igen (hvilket altid sker når login = ok). Det er lige som om, at mine sessions ikke bliver gemt, før jeg forsøger at logge ind 2. gang, da det her virker upåklageligt.

Det samme gør sig gældende over hele siden; jeg skal prøve 2 gange at logge ind/tilføje til indkøbskurv/etc. før mine sessions bliver oprettet. Når først jeg har prøvet at logge ind 2 gange/tilføje en vare 2 gange/etc., så virker det fremover helt fint, lige indtil jeg kommer ind på siden igen - så er det forfra.

Jeg kører på Wannafind.dk's servere, som jeg aldrig har haft problemer med før (Det har dog været på deres ASP-servere, da jeg er forholdsvis ny i PHP).

Hjemmesiden det drejer sig om, er http://www.jama-tech.dk - så kan i selv prøve at tilføje en vare til indkøbskurven og se hvad jeg mener :)

Spørgsmålet er så egentlig: Hvordan kan det være? Mangler jeg at gøre noget? Eller kunne det være et serverside problem?

Med venlig hilsen
Lars
Avatar billede repox Seniormester
22. oktober 2009 - 11:48 #1
Prøv at vise os koden for din dit login script.
Avatar billede michael_stim Ekspert
22. oktober 2009 - 11:48 #2
Vil nok mere gætte på at det er forkert kodning. Men kan ikke hjælpe dig uden noget kode.
Avatar billede michael_stim Ekspert
22. oktober 2009 - 11:50 #3
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/www.jama-tech.dk/www/kurv_vis.php on line 35
Avatar billede michael_stim Ekspert
22. oktober 2009 - 11:52 #4
Lige meget hvad jeg køber, bliver det til en golfparaply (valgte jeg først).
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 11:53 #5
Koden for mit login-script ser således ud:

<?php
include("top.php");

$strBruger = mysql_real_escape_string($_POST['Bruger']);
$strKode = MD5($_POST['Kode']);

$strSQL = "SELECT Count(Id) AS Found FROM ".$dbPrefix."Kunder WHERE (Id = '".$strBruger."' OR Email = '".$strBruger."')";
$query = mysql_query($strSQL);

$rec = mysql_fetch_assoc($query);

if ($rec['Found'] != 0)
{
    //BRUGER FUNDET
    $strSQL = "SELECT Count(Id) AS Found FROM ".$dbPrefix."Kunder WHERE (Id = '".$strBruger."' OR Email = '".$strBruger."') AND Kodeord = '".$strKode."'";
    $query = mysql_query($strSQL);

    $rec = mysql_fetch_assoc($query);

    if ($rec['Found'] != 0)
    {
        //ADGANGSKODE OK!
        $strSQL = "SELECT Id, Adgang FROM ".$dbPrefix."Kunder WHERE (Id = '".$strBruger."' OR Email = '".$strBruger."') AND Kodeord = '".$strKode."'";
        $query = mysql_query($strSQL);

        $rec = mysql_fetch_assoc($query);

        $_SESSION['Id'] = $rec['Id'];
        $_SESSION['Admin'] = $rec['Adgang'];

        Redirect($strHTTP.'/index.php');
    }
        else
    {
        //ADGANGSKODE FORKERT!
        echo "<span class='Overskrift'>Login fejl</span><br>";
        echo "<span class='Text'>Forkert adgangskode! Prøv igen...</span>";
    }
}
    else
{
    //BRUGER IKKE FUNDET
    echo "<span class='Overskrift'>Login fejl</span><br>";
    echo "<span class='Text'>Den angivne bruger blev ikke fundet! Prøv igen...</span>";
}

include("bund.php");
?>


Som sagt, er dette ikke kun loginscriptet der har problemer, men hele siden generelt.

I top.php er "config.php" inkluderet øverst:

<?php
$db = mysql_connect("xxxx", "xxxx", "xxxx") or die(mysql_error());
$sDB = mysql_select_db("xxxxdb") or die(mysql_error());

session_start();
$dbPrefix = "shop_";
$strHTTP = "http://jama-tech.dk";
?>


Selve opbygningen med sessions er dog det samme på resten af siden, så hvis der er fejl her, er der sikkert også andre steder :)
Avatar billede michael_stim Ekspert
22. oktober 2009 - 11:53 #6
Plus at hele designet flytter sig (ie8).
Avatar billede michael_stim Ekspert
22. oktober 2009 - 11:55 #7
session_start() skal ALTID stå længst oppe. Ikke noget enter eller lignende.
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 11:56 #8
Jeg prøver at smide session_start(); aller øverst så :)


Mht. fejlen i indkøbskurven, så kunne jeg ikke lige umiddelbart genskabe den, men vil forsøger lige igen.
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 11:57 #9
*men forsøger lige igen
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 11:58 #10
Heller ikke med session_start(); aller øverst giver det nogen forskel :/
Avatar billede repox Seniormester
22. oktober 2009 - 11:59 #11
Hvad gør din Redirect($strHTTP.'/index.php'); funktion?
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:01 #12
Redirect er et javascript, der står i top.php:

<?php
function Redirect($strHTTP)
{
    echo "<script type='text/javascript'>";
        echo "window.location = '".$strHTTP."'";
    echo "</script>";
}
?>

Grunden til jeg har brugt javascript-funktionen, er at jeg ikke kan bruge Header(); når der allerede er skrevet noget tekst på skærmen - eller er der en vej udenom dette? :)
Avatar billede michael_stim Ekspert
22. oktober 2009 - 12:08 #13
Ja, kør headeren før der bliver skrevet noget til skærmen. Desuden har du glemt en udkommentering (html) et eller andet sted. Hele HTML'en bliver udkommenteret, når jeg læser koden via vis kilde.

Ang. fejlen, får jeg den når jeg klikker på "køb" inde under en af menuerne.
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:09 #14
Og btw så har jeg godt bemærket problemet med IE8 - skal have læst op på brugen af <div> i stedet for <table>, men var konservativ da jeg startede på hjemmesiden, da jeg aldrig før havde benyttet <div>'s før ;)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:15 #15
Michael:
Hvilken side var du på, da alt HTML'en blev udkommenteret?
Og mht. den fejl, så har jeg fundet problemet :) Det lå i, at jeg havde glemt at rette "Køb"-linket til i oversigten over varer - dumt. :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:19 #16
Lige et hurtigt spørgsmål til arrays.

Er det muligt at lave et array, som ser nogenlunde sådan ud:

$mitArray['Kurv'][$vareID]['Antal'] = 1
$mitArray['Kurv'][$vareID]['Størrelse'] = 1
$mitArray['Kurv'][$vareID]['Farve'] = 1

Altså et array med 3 dimensioner?

Repox: Fik lige inspiration til spørgsmålet ud fra din artikel omkring "Sessions for begyndere" - god læsning! :)
Avatar billede repox Seniormester
22. oktober 2009 - 12:26 #17
#16

Ja, det ville faktisk være en god måde at gøre det på (hvis du dropper de danske karakterer i dine arrays index' ;) )

Det ville også være den måde man ville gøre det på, hvis man generelt havde varer som havde flere attributter - men løsningerne er mange og kan ofte være meget komplekse for at opnå det ønskede resultat. Men dit forslag er en meget god og stabil metode at løse en sådan opgave på.

Og tak for komplimentet ;)

Med hensyn til dit oprindelige spørgsmål, så tror jeg problemet ligger i den logiske rækkefølge. Du må kunne korte dit script betydeligt ned og få lidt mere overblik over koden.
Avatar billede michael_stim Ekspert
22. oktober 2009 - 12:26 #18
#15
Alle sider. Tror det er i top funktionen.
Avatar billede michael_stim Ekspert
22. oktober 2009 - 12:30 #19
<!-- link rel="stylesheet" type="text/css" href="http://www.jama-tech.dk/style/style.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://www.jama-tech.dk/js/jquery.fancybox/jquery.fancybox.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://www.jama-tech.dk/style/wysiwyg.css" media="screen" />
    <script type="text/javascript" src="http://www.jama-tech.dk/js/jquery.fancybox/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="http://www.jama-tech.dk/js/jquery.fancybox/jquery.easing.1.3.js"></script>
    <script type="text/javascript" src="http://www.jama-tech.dk/js/jquery.fancybox/jquery.fancybox-1.2.1.pack.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            $("a.Galleri").fancybox();
        });

        function addField(strName, strType, strIName) {
            var x = document.getElementById(strName);
          var i = parseFloat(x.lastChild.id)+1;
          input = document.createElement("input");
          input.setAttribute("type", strType);
          input.setAttribute("name", strIName+ '_' + i);
          input.setAttribute("id", i);
          x.appendChild(input);
        }
    </script>
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:33 #20
#17
Jeps - det virker umiddelbart som en rigtig god løsning - meget bedre end den jeg har lige nu i hvert fald :) (Bruger strings, explode etc.), så skal have omdannet det til Arrays nu :)

Jeg vil forsøge at korte ned på mine scripts, og se på hvordan det løser sig. Skal lige teste, om problemet også opstår hvis jeg tager det simpleste script af dem alle - start sessions, tilføj værdi og vis værdien :) Så må vi se, om problemet gengiver sig!

#18
Okay - synes ikke lige jeg kunne se det her; hvilken browser bruger du? Sidder selv i Google-chrome, men vil lige se det fra "den anden side" :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:34 #21
#19

Ah ja - den havde jeg glemt! Det skulle nu være rettet :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:35 #22
Afk frokost - tilbage om 15 min :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 12:57 #23
Sådan :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 13:02 #24
Ved at køre dette script:

<?php
session_start();

$_SESSION['Test'] = "Hejsa!";

echo $_SESSION['Test'];
?>

Får jeg udskrevet 'Hejsa!' helt uden problemer - også første gang! Mystisk :)
Avatar billede repox Seniormester
22. oktober 2009 - 13:07 #25
#24
Nej, det er egentlig ikke mystisk.
I det eksempel du giver har session_start() ikke nogen effekt.
$_SESSION er blot et array. session_start() sørger for at hælde de rigtige ting ind i det array når session_start() eksekveres.
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 13:20 #26
Ah okay - jeg prøver lige at splitte filen op og prøve igen så :)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 13:22 #27
Heller intet problem når filen er splittet op:

http://www.jama-tech.dk/test.php

<?php
session_start();

$_SESSION['Test'] = "Hejsa!";
?>
<a href='test2.php'>Klik på mig!</a>

og test2.php:

<?php
session_start();
echo $_SESSION['Test'];
?>
<br>
<a href='test.php'>Tilbage?</a>
Avatar billede repox Seniormester
22. oktober 2009 - 13:31 #28
Så må problemet ligge i logikken - altså rækkefølgen af de ting du gør.

Dit login script kan også simplificeres betydeligt:

<?php
include("top.php");

if(isset($_POST["Bruger"]))
{
    $strBruger = mysql_real_escape_string($_POST['Bruger']);
    $strKode = MD5($_POST['Kode']);

    $strSQL = "SELECT Id, Adgang FROM ".$dbPrefix."Kunder WHERE (Id = '".$strBruger."' OR Email = '".$strBruger."') AND Kodeord = '".$strKode."' LIMIT 1";
    $query = mysql_query($strSQL);
   
    if(mysql_num_rows($query) > 0)
    {
        $rec = mysql_fetch_assoc($query);

        $_SESSION['Id'] = $rec["Id"];
        $_SESSION['Admin'] = $rec["Adgang"];

        Redirect($strHTTP."/index.php");

    }
    else
    {
    echo "<span class='Overskrift'>Login fejl</span><br>";
    echo "<span class='Text'>Den angivne bruger blev ikke fundet! Prøv igen...</span>";   
    }
}

include("bund.php");
?>


bær lige over med syntaks fejl - det er af gode grunde ikke testet ;)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 13:34 #29
Ah smart - mysql_num_rows - den funktion er god at kende :) Jeg laver mit script om og tester :) Tak for hjælpen so far =)
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 13:48 #30
Selv med simplificeret script er der stadig problemer. Har gennemgået min top.php og alle filer includeret deri, men størstedelen er blot HTML eller nogle simple forespørgsler til MySQL-databasen :/
Avatar billede repox Seniormester
22. oktober 2009 - 14:01 #31
Må jeg se top.php?
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 14:13 #32
Ja selvfølgelig.

Du kan se den på:

www.jama-tech.dk/exp/top.txt
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 14:14 #33
Ikke tag dig af alle tabellerne :p
Avatar billede repox Seniormester
22. oktober 2009 - 14:23 #34
Jeg bliver nød til at give fortabt - jeg skal have hands-on for at kunne spore mig frem til årsagen.
Avatar billede biohazard_666 Nybegynder
22. oktober 2009 - 14:26 #35
hehe okay - tak for hjælpen :)

Hvis du har tid/lyst til at kaste dig over problemet, kan vi sikkert finde ud af noget hvis du har msn/aim eller lign.
Avatar billede dkfire Nybegynder
23. oktober 2009 - 13:46 #36
Kan det skyldes den måde hvorpå du redirecter ?
Prøv at se om du kan gøre det uden "http://...." foran filen.

Redirect("/index.php");

evt kan du jo prøve i dit lille forsøg med to filer at se hvad din Redirect() funktion har af påvirkning på session med og uden http.
Avatar billede biohazard_666 Nybegynder
31. januar 2010 - 15:07 #37
Lukker det her
Avatar billede biohazard_666 Nybegynder
03. februar 2010 - 13:37 #38
Fandt for resten svaret. Det skyldes at jeg altid var gået ind på http://jama-tech.dk, og senere blev redirected til http://www.jama-tech.dk. Dette gjorde så, at mine sessions ikke blev ført med over, så det er blevet rettet nu :)
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