[PHP] taal opslaan dmv sessie werkt niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • f1r3b4ll
  • Registratie: Augustus 2000
  • Laatst online: 04-09 01:04
lieden,


ik heb toch wel een zeer merkwaardig probleem met een website die ik aan het maken ben:

De website moet in 2 talen beschikbaar zijn: Frysk en Nederlands. Op de homepage van de site staan 2 vlaggetjes. Als men op een vlaggetje klikt wordt dmv een GET variabele de nieuwe taal doorgegeven, die dan wordt opgeslagen in een sessie. Niks aan de hand zou je denken, de sessie blijft bestaan totdat de gebruiker zijn browser sluit. Helaas is niets minder waar, na een aantal keer de pagina refreshen, springt de taal soms gewoon doodleuk van Nederlands naar Frysk. Ik heb echt al 1000x het stukje code opnieuw geschreven, maar het werkt niet, tenminste niet op de server van Lycos waar de website gehost wordt. Thuis op mijn eigen Linux server lijk ik geen problemen te hebben.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
    session_start();

    if(!$_SESSION['lang'])
    {
        $_SESSION['lang'] = "fr";
    }
    
    if($_GET['lang'])
    {
        $_SESSION['lang'] = $_GET['lang'];
        header("location:index.php");
    }
    
    $lang = $_SESSION['lang'];
?>


Zou iemand een blik op deze code kunnen werpen en aanwijzingen kunnen geven? Jullie zouden mij geweldig uit de brand helpen!!! _/-\o_

Simon-Paul

edit: mijn excuses voor het vergeten van de [PHP] topic titel prefix!!!

[ Voor 8% gewijzigd door f1r3b4ll op 20-09-2005 13:41 ]

Daikin 4MXM68A2V1B9 + FTXA50C2V1BB + 2x FTXM25A5V1B + FTXM20A5V1B. SolarEdge 13960 Wp PV array + SE9K inverter


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 20-09 21:53
Zoals je zelf al aangeeft lijkt het een Server probleem te zijn. Plaats even bovenin je script de volgende regel:
PHP:
1
2
3
<?
error_reporting(E_ALL);
?>

Dan krijg je op alle servers altijd alle errors te zien wellicht dat je dan op die server een foutmelding krijgt.

Edit:
Je checks of de sessievar en get var gevuld zijn niet geheel waterdicht de sessie of get var kan ook nog niet bestaan. Breid je checks daarom uit met een extra isset:

PHP:
1
2
3
4
5
6
7
8
9
10
if(!isset($_SESSION['lang']) || !$_SESSION['lang'])
{
    $_SESSION['lang'] = "fr";
}
    
if(!isset($_GET['lang']) || !$_GET['lang'])
{
    $_SESSION['lang'] = $_GET['lang'];
    header("location:index.php");
}

[ Voor 44% gewijzigd door pjonk op 20-09-2005 13:48 ]

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Staat register_globals uit?
Anders worden alle waardes uit de superglobals in de global scope geladen, waardoor $lang altijd hetzelfde bevat als $_COOKIE['lang'], $_GET['lang'], $_SERVER['lang'], of een van de andere superglobals welke is geset.

Kun je heel makkelijk testen door bijv; echo $PHP_SELF.
Als die het server-pad naar het php-script toont staat register_globals aan. Zet deze bij voorkeur uit, mocht dat niet kunnen gebruik dan $lang1 en $lang2 als variabele-namen.

2de mogelijkheid is de lifetime van het sessie_cookie. Deze moet je ergens terug kunnen vinden door phpinfo() te printen.

@JonkieXL
Vergeet dan ook ini_set('display_errors", 1); niet, voor het geval die uitstaat.

[ Voor 11% gewijzigd door frickY op 20-09-2005 13:47 ]


Acties:
  • 0 Henk 'm!

  • satyriasis
  • Registratie: Januari 2000
  • Laatst online: 19-09 14:37
Er zit een logisch probleempje in :)
PHP:
1
2
3
if ($_GET['blaat']) {
blaat();
}

die if komt nooit op true uit.

daar is de functie isset voor.

PS gebruik ze voor beide if-jes

[ Voor 12% gewijzigd door satyriasis op 20-09-2005 13:57 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

In de usercomments op http://nl3.php.net/function.session-start lees ik eea over sessies die 'verloren' gaan door een location redirect onder IIS, wellicht is zoiets hier ook aan de hand?

Intentionally left blank