Avatar billede shubijam Nybegynder
11. maj 2005 - 12:50 Der er 10 kommentarer

Sessions virker ikke på Mac

Hej Eksperter

I mit cms-system (PHP og MySql) logger brugeren sig ind med brugernavn og password.

Brugernavn og en angivelse af, at man nu har adgang lægges i de to følgende sessions:

$_SESSION["sess_bruger"]=$row_bruger[Id];
$_SESSION["sess_adgang"]=1;

Det virker upåklageligt på PC (både IE og Netscape), men jeg står nu med en bruger, som ikke kan logge ind fra sin Mac (hverken med Netscape eller IE). Jeg synes, jeg har orienteret mig i tidligere indlæg, men kan ikke finde svaret.

Kan nogen hjælpe?
Avatar billede fennec Nybegynder
11. maj 2005 - 14:00 #1
Nu skal jeg ikke gøre mig klog på MAC, men jeg har oplevet at sessions ikke virker, hvis man ikke tallader cookies, så prøv at undersøge om brugeren gør det...
Avatar billede plazm Nybegynder
11. maj 2005 - 14:04 #2
Sessions kræver at cookies er tilladte.

Sessions opretter en cookie med sessionID'et på brugerens computer så den kan indentificere personen.
Avatar billede shubijam Nybegynder
11. maj 2005 - 14:34 #3
OK - jeg prøver lige at tjekke det ud. Måske kan jeg først vende tilbage i morgen, så hold ud..
Avatar billede olebole Juniormester
11. maj 2005 - 16:06 #4
<ole>

Nej, sessions kræver ikke, cookies er tilladt - det kommer helt anpå, hvordan man bruger sine sessions ... hvordan PHP er sat til at håndtere sessions  :)

/mvh
</bole>
Avatar billede plazm Nybegynder
11. maj 2005 - 19:45 #5
A visitor accessing your web site is assigned an unique id, the so-called session id. This is either stored in a cookie on the user side or is propagated in the URL.

Du har ret, Shubijam bruger du PHPsesid i url ?
Avatar billede sukos Juniormester
11. maj 2005 - 21:09 #6
Du kan prøve med dette simple login:

<?php

session_start();
$id_ref = SID;

$user = "test";
$pass = "test";

$back = $_SERVER["PHP_SELF"];

if(!empty($id_ref)) {
$back = $back ."?". $id_ref;
}

if(isset($_POST["bruger"], $_POST["password"])) {
    if($_POST["bruger"] == $user && $_POST["password"] == $pass) {
    $_SESSION["user"] = 1;
    }else{
    $_SESSION["fejl"] = "Forkert brugernavn og/eller password";
    }

header("Location:". $back ."");
exit();
}

if(isset($_GET["logud"])) {
$_SESSION = array();
session_destroy();
header("Location:". $_SERVER["PHP_SELF"] ."");
exit();
}
?><html><head><title>Logind</title></head>

<body>

<?php

if(isset($_SESSION["user"])) {
echo"Hejsa, du er nu logget ind<br>\n";
echo"<a href=\"". $_SERVER["PHP_SELF"] ."?logud=true\">Log ud</a>";


}else{

?>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Username: (test)<br>
<input type="text" name="bruger"><br>
Password: (test)<br>
<input type="password" name="password"><br>
<input type="submit" value="Log ind">
</form>


<?php
if(isset($_SESSION["fejl"])) {
echo $_SESSION["fejl"];
unset($_SESSION["fejl"]);
}



}
?>

</body></html>
Avatar billede shubijam Nybegynder
13. maj 2005 - 09:27 #7
Hej igen

Tak for svarene. Jeg bad brugeren ændre sine indstillinger for cookies i browseren, og efterfølgende har der tilsyneladende ikke været problemer. Efter hvad jeg selv har læst tror jeg dog heller ikke på, at det er årsagen.

Der bliver spurgt, om jeg bruger "PHPsesid i url", og jeg kan se, at ovenstående script anvender SID. Det er åbenbart et "objekt", som indeholder samtlige session-variable?

Jeg har ikke brugt SID i url'en. Jeg kan ikke helt se nødvendigheden af det, da sessions jo eksisterer "globalt" uanset hvad? Det eneste jeg gør er at starte sessions med

session_start();

og derefter tildeler jeg værdier til de to variable (hvis man ellers eksisterer som bruger):

$_SESSION["sess_bruger"]=$row_bruger[Id];
$_SESSION["sess_adgang"]=1;

Jeg har lidt svært ved at uddele point, så måske kunne en forklaring på dette udløse præmien...
Avatar billede sukos Juniormester
13. maj 2005 - 10:48 #8
SID svarer til
session_name() ."&". session_id()

og findes hvis der IKKE er sat en sessioncookie

At der ikke længere er problemer efter ændring af cookie indtsillinger, tyder jo ellers på at det var her problemet lå?
Avatar billede olebole Juniormester
13. maj 2005 - 18:31 #9
Hele fidusen ved sessions er, at du ikke sender session-variabler med brugeren. Dem beholder du på serveren, så de kun er synlige for denne. Det eneste, du sender med brugeren, er et ID, der sikrer, du kan finde hans variabler igen.

Når du sætter en session på en bruger, skriver du en lille fil på serveren. I den fil bliver alle brugerens session-variabler skrevet og gemt.
Når brugeren skifter side, skal denne fil findes frem på serveren, så hans session-variabler kan genbruges. Det kan gøres på to forskellige måder:

1. Der sættes en cookie på klienten. Det er en lille tekst-fil, der bliver skrevet på brugerens HD - og som indeholder 'navnet' på brugerens session.

2. Sættes der ikke en kage, må man sende 'navnet' på brugerens session med i URL'en og/eller et skjult formfelt, hvis der skal postes fra en form.

Kan serveren ikke finde 'navnet' på brugerens session på én af disse måder, er det jo ikke muligt at genfinde den fil, der indeholder brugerens session-variabler.

Er serveren sat op til at sætte session-cookies, kræver det, at dine brugere accepterer cookies.
Avatar billede shubijam Nybegynder
16. maj 2005 - 10:27 #10
Hej igen - beklager den lidt lange respons-tid. Tak for jeres svar. Jeg blev i virkeligheden nok klogest af oleboles sidste forklaring, så du får pointene. Håber, det er fair! Skriver du et svar..
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