[PHP] Session wordt niet onthouden door sommige browsers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben bezig met een redelijk groot project, en zit met het volgende probleem: Als ik een bepaalde variable in een php-session zet, wordt deze niet onthouden door de client-pc. Dit komt alleen voor met Internet Explorer en Firefox, onder Safari werkt het wel. Om te schetsen wat er fout gaat, hierbij de code waar het fout gaat:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start();

echo '<a href="'.$_SERVER['PHP_SELF'].'?get=ja">Stuur ja</a><br>';
echo '<a href="'.$_SERVER['PHP_SELF'].'">Stuur niets</a><br><br>';

if(isset($_GET['get']))
{
$_SESSION['get'] = $_GET['get'];    
}

echo $_SESSION['get'];

?>


Als je dus de pagina aanroept met ?get=ja, dan wordt deze weggeschreven in een session. Daarna echo je deze session. Als je dan vervolgens de pagina refresht, maar dan zonder ?get=ja, dan is de session leeg en wordt er dus ook niets 'geechoed'.

Cookies staan aan op de client-pc; nogmaals, onder Safari werkt het prima, maar het project gaat onder IE7 draaien _/-\o_

Alvast bedankt!

Pascal

EDIT:
Even nog vertellen wat ik al geprobeerd had:
  • ob_start();
  • PHP:
    1
    2
    3
    4
    5
    
    if($_SERVER['HTTP_HOST']!=$_SERVER['SERVER_NAME'])
    {
        header ("location:http://".$_SERVER['SERVER_NAME']." ".$_SERVER['REQUEST_URI']."");
        exit();
    }
  • header("Cache-control: private");

[ Voor 13% gewijzigd door Verwijderd op 23-05-2008 08:44 ]


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Wellicht treedt het probleem op omdat je je sessie niet afsluit:
code:
1
session_write_close();

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op vrijdag 23 mei 2008 @ 08:42:
Als ik een bepaalde variable in een php-session zet, wordt deze niet onthouden door de client-pc.
Variabelen in PHP sessions worden sowieso niet onthouden door de client-pc. PHP sessions staan op de server.
• header("Cache-control: private");
Waarom verwachtte je dat dat iets uit zou maken voor dit probleem?

[ Voor 16% gewijzigd door Confusion op 23-05-2008 08:49 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
KabouterSuper schreef op vrijdag 23 mei 2008 @ 08:44:
Wellicht treedt het probleem op omdat je je sessie niet afsluit:
code:
1
session_write_close();
Dit helpt helaas niet :)
Confusion schreef op vrijdag 23 mei 2008 @ 08:47:
[...]

Variabelen in PHP sessions worden sowieso niet onthouden door de client-pc. PHP sessions staan op de server.


[...]

Waarom verwachtte je dat dat iets uit zou maken voor dit probleem?
Ik had een soortgelijk topic op GoT gevonden waar dit instond, ik wist niet precies wat het deed, maar ik heb het geprobeerd O-)

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Heb je je error-reporting aanstaan? Je zou sowieso een foutmelding moeten krijgen als $_SESSION['get'] niet bestaat.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 19:39
Je code werkt hier iig prima. Ik zou het eerder gaan zoeken in je webserver-configuratie. Kun je het 'session'-gedeelte van de phpinfo();-output hier eens posten?

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
KabouterSuper schreef op vrijdag 23 mei 2008 @ 08:55:
Heb je je error-reporting aanstaan? Je zou sowieso een foutmelding moeten krijgen als $_SESSION['get'] niet bestaat.
En var_dump() ipv echo is ook handiger, dan zie je het ook als je een keer per ongeluk de lege string assignet.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Session

Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary wddx


DirectiveLocal ValueMaster Value
session.auto_startOffOff
session.bug_compat_42OnOn
session.bug_compat_warnOnOn
session.cache_expire180180
session.cache_limiternocachenocache
session.cookie_domainno valueno value
session.cookie_httponlyOffOff
session.cookie_lifetime00
session.cookie_path//
session.cookie_secureOffOff
session.entropy_fileno valueno value
session.entropy_length00
session.gc_divisor100100
session.gc_maxlifetime14401440
session.gc_probability00
session.hash_bits_per_character44
session.hash_function00
session.namePHPSESSIDPHPSESSID
session.referer_checkno valueno value
session.save_handlerfilesfiles
session.save_path/tmp/tmp
session.serialize_handlerphpphp
session.use_cookiesOnOn
session.use_only_cookiesOffOff
session.use_trans_sid00

Ik heb nu het volgende toegevoegd:
PHP:
1
2
ini_set('error_reporting', E_ALL);
ini_set("display_errors","1");


En ik krijg de volgende errors terug:

code:
1
2
3
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/.../test.php:2) in /home/.../test.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/p.../test.php:2) in /home/.../test.php on line 5


Ik denk dat ik al een heel stuk verder ben en even goed ga zoeken naar die errors, ik had geen idee dat je deze kon enableen, geweldig! :*)

Alvast bedankt allemaal!

Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 19:39
Ah, het zit hem dus niet in de configuratie. Wel in je code, alleen niet in het stukje dat je hier post. ;)

Je mag session_start() alleen gebruiken als er nog geen enkele uitvoer is geweest. session_start() een stuk omhoog verhuizen ofzo dus...

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Mjah, hij geeft wel aan dat ie ob_start() geprobeerd heeft, daarmee had ik die optie enigszins uitgesloten.. tenzij die net zo goed weet hoe output buffering werkt als sessies natuurlijk in php :P

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik gok dat hij ob_start vlak voor de header() call gezet heeft. :+ :>

Nofi, maar 'headers already sent' is een van de meest voorkomende fouten, dus daar moet je wel zelf uit kunnen komen. En tijdens het devven moet je idd gewoon altijd alle errors laten tonen.

{signature}


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Klinkt alsof je voor je session_start al output hebt weggeschreven.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik voel me ontzettend dom 8)7
Ik had een <html> en <body>-tag staan, nog voor session_start... :X

Allemaal heel erg bedankt voor de hulp!!! _/-\o_
Pagina: 1