Avatar billede mazey Praktikant
28. januar 2006 - 15:37 Der er 17 kommentarer og
2 løsninger

Spørgsmål om sessions eller cookies

Hej Eksperter...

Jeg er ved at lave et site med mulighed for at vælge mellem sprog.

Som det er programmeret nu laver sitet først en søgning i en tabel for at se om der er aktive sprog, og hvis der er så viser den et landeflag for de sprog der er aktive.

Når man så klikker på det pågældende flag kommer man så til index siden hvor det pågældende sprog er aktivt.
Måden jeg har gjort det på er at jeg har tilføjet en href til hvert flag, som indeholder en variabel med den landekode.
Når man så klikker på det flag og er på index siden er der så en variabel i adresselinien (f.x. index.php?lang=dk)
Så har jeg så på index siden lavet en variabel som med $_GET henter den variabel fra adresselinien og sætter den som en session.

Problemet er jo så at når man klikker videre fra index siden kan den jo ikke få den variabel igen (med mindre man tilføjer "lang" til hvert link).

Kan man løse det problem sådan forholdsvist nemt, evt. med cookies (som jeg intet ved om)?

Hvis i ikke forstår mig så sig til!
Avatar billede mazey Praktikant
28. januar 2006 - 15:41 #1
For lige at få lidt kode med, så er det således:

Første side hvor man vælger sprog:

<?
    $foresp = mysql_query("SELECT * FROM rt_lang WHERE active = 1");
    $num_rows = mysql_num_rows($foresp);
    if($num_rows >= 1){
    echo "<a href='index2.php?lang=dk'><img src='land/danish.jpg' border='0'></a>"."&nbsp;&nbsp;";
    while($data = mysql_fetch_array($foresp)){
    echo "<a href='index2.php?lang=$data[kode]'><img src='land/$data[pic]' border='0'></a>"."&nbsp;&nbsp; ";
    }
    }
    ?>


Index siden:

$_SESSION[country] = $_GET[lang];

Det virker jo så fint på den første side, men klikker man videre til en anden kategori forsvinder lang variablen jo... :D
Avatar billede hmortensen Nybegynder
28. januar 2006 - 15:46 #2
Du sætter jo en session, hvorfor ikke bruge den.

Du skal blot have session_start() på alle sider der skal bruge sessionen.
Avatar billede kimg Nybegynder
28. januar 2006 - 15:47 #3
På alle dine sider skal du bare have session_start(); i toppen af siden
Kim
Avatar billede kimg Nybegynder
28. januar 2006 - 15:48 #4
;-)
Avatar billede mazey Praktikant
28. januar 2006 - 15:48 #5
Det er jo også det jeg gerne vil :D
Men den session forsvinder åbenbart hvis jeg klikker på et link.
Jeg har en session_start(); på hver side... eller det vil sige jeg har en på index siden som bare kører videre, da jeg åbner de andre sider på selve index siden
Avatar billede mazey Praktikant
28. januar 2006 - 15:49 #6
index siden:

session_start();
$_SESSION[country] = $_GET[lang];

<?
    $show = $_GET[show];
   
    if(isset($show)){
    include("pages/$show.php");
    }else{
    include("pages/index.php");
    }
    ?>
Avatar billede kimg Nybegynder
28. januar 2006 - 15:52 #7
Det er fordi du så sætter "$_SESSION[country] = $_GET[lang];" denne her hele tiden så bliver "$_SESSION[country]" = ingenting

Kim
Avatar billede hmortensen Nybegynder
28. januar 2006 - 15:52 #8
Må være fordi denne linie overskriver med en tom værdi så:
$_SESSION[country] = $_GET[lang];

Kan prøve sådan her:
if (isset($_GET['lang']))
  $_SESSION['country'];


Så bør du kunne bruge $_SESSION['country'] på alle sider.
Avatar billede mazey Praktikant
28. januar 2006 - 15:52 #9
Men den "lang" variabel i adresselinien kommer jo ikke med hvis jeg klikker på en underside... så bliver det jo bare ?show=underside...
Så bliver session variablen vel bare "ingenting"?

Jeg kan sagtens eliminere problemet med at tilføje "&lang=land" på hvert link, men hvis det kan undgås vil jeg jo gerne det... :D
Avatar billede kimg Nybegynder
28. januar 2006 - 15:54 #10
if(isset($_GET['lang'])){

$_SESSION[country] = $_GET[lang];

}
Avatar billede mazey Praktikant
28. januar 2006 - 15:56 #11
Selvfølgelig!.... Den er jo oplagt! hehe dumme mig!

I havde jo begge det samme resultat, så vil i dele pointene?
Avatar billede kimg Nybegynder
28. januar 2006 - 15:57 #12
Lyder som en god ide ;-)
Avatar billede hmortensen Nybegynder
28. januar 2006 - 16:01 #13
:)
Avatar billede mazey Praktikant
28. januar 2006 - 16:03 #14
tak for hjælpen
Avatar billede olebole Juniormester
28. januar 2006 - 21:31 #15
<ole>

Man skal altid tænke sig grundigt om, inden man vælger at bruge sessions. En session er en fil, der ligger i en mappe på serveren. Når der sættes en session, skrives en sådan fil og navnet bliver gemt i en cookie på klienten (som er en fil på klient-maskinen) - eller sendes med i URL'erne.
Når brugeren tilgår en ny side, hvor variablerne i den pågældende session ønskes læst, skal serveren først læse navnet og derefter ned og rode efter den i mappen, åbne den, læse den og lukke den igen.

Da brugeren ikke kan manipulere med sessionfilen, er det en god metode til følsomme info - men til et sprogvalg er en cookie langt at foretrække. Den vil performe langt bedre  :)

/mvh
</bole>
Avatar billede olebole Juniormester
28. januar 2006 - 21:33 #16
- og husk i øvrigt altid at bruge gåseøjne i array-kald:
    $_SESSION["country"] = $_GET["lang"];

Selvom PHP retter fejlen, kan det resultere i uhensigtsmæssigheder at undlade dem
Avatar billede mazey Praktikant
28. januar 2006 - 21:35 #17
Det er da meget interessant det du skriver olebole, men som jeg også tidlligere har skrevet ved jeg intet om cookies... derfor valgte jeg at bruge sessions, da det for mig ville være det nemmeste... er det ligeså nemt med cookies da?
Avatar billede olebole Juniormester
30. januar 2006 - 07:03 #18
Ja, det er der ikke megen hokus-pokus ved  :)

<?
// Bag en kage:
setcookie("sprogKage", "dk");
?>

Herefter kan du i de følgende dokumenter finde den med:

<?
print $_COOKIE["sprogKage"];
?>

- eller ændre den med:

<?
$_COOKIE["sprogKage"] = "se";
?>

http://dk.php.net/manual/da/function.setcookie.php
Avatar billede olebole Juniormester
30. januar 2006 - 07:05 #19
- men husk, at kagen sættes i HTTP-header'en, hvorfor der ikke må være outputtet én eneste linje, før den sættes ... så bliver der smidt en 'Header already sent' fejl  ;o)
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel