cookies lokale servers worden niet gezet

Pagina: 1
Acties:

  • htca
  • Registratie: November 2001
  • Laatst online: 11:47
Ik heb de search doorgezocht, gegoogled, maar kan niet tot een oplossing komen. Ik wil thuis (lokaal) wat debuggen aan mijn php pagina's. Maar de cookies worden niet gezet. Ter info heb ik een simpel scriptje gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<title>
PHP - Cookie Example 1
</title>
</head>
<body>
<h1>Cookie Example 1</h1>
<font size=+2 face = verdana>
<?
    $visitcount = $HTTP_COOKIE_VARS["visits"];
    if( $visitcount == "")  $visitcount = 0;
    else    $visitcount++;
    setcookie("visits",$visitcount);
    print "This is visit number " . $visitcount;
?>
</font>
</body>
</html>


Als ik deze op mijn webserver bij mijn isp zet, dat werkt het gewoon. Als ik het op mijn lokale webserver zet blijft $visitcount=0.
Ik heb op zowel op de lokale server als op de server bij de isp php 4.3.9 draaien. Ik heb beide configs bekeken met <? phpinfo ?> en gezorgd dat mijn lokale server dezelfde config had als mijn isp-server. Voor het geval er vragen komen mijn tmp directory is schrijfbaar. Overigens heb ik hetzelfde verschijnsel op allebei mijn lokale servers.

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Setcookie gebruikt headers, en nu stuur je eerst wat tagsoup voordat je setcookie aanroept. Heb je error_reporting(E_ALL) staan?

  • htca
  • Registratie: November 2001
  • Laatst online: 11:47
Waar moet ik die zetten?

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
register_globals staat off? Gebruik $_COOKIES i.p.v. $HTTP_COOKIE_VARS. En zet register_globals niet on

En als je even zoekt op php.net naar error_reporting() weet je ook waar je die moet zetten...

[ Voor 15% gewijzigd door ludo op 16-01-2005 20:46 ]


  • htca
  • Registratie: November 2001
  • Laatst online: 11:47
Alles leuk en wel, maar mijn isp heeft de register_globals ook op on staan.
Met error_reporting(E_ALL) krijg ik de volgende melding:
code:
1
2
3
Notice: Undefined variable: _COOKIES in /var/www/html/test/index.php on line 12

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/test/index.php:10) in /var/www/html/test/index.php on line 15


ik had $HTTP_COOKIE_VARS al vervangen door $_COOKIES

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:34
Something like this.... De eis van cookies (met setcookie() ) is: dat ze gezet worden voordat er output naar de browser is gedaan. De code hieronder levert een werkend example op. ;) (beetje raar, het lijkt alsof je dit van een PHP tutorial site af hebt gehaald, en dan zou dat zeer slordig zijn om een foutief script te plaatsen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
    $visitcount = $HTTP_COOKIE_VARS["visits"];
    if ($visitcount == "")   { $visitcount = 0; }
    else { $visitcount++; }
    setcookie("visits",$visitcount);
?>
<html>
<head>
<title>
PHP - Cookie Example 1
</title>
</head>
<body>
<h1>Cookie Example 1</h1>
<font size="+2" face="verdana">
<?
    print "This is visit number " . $visitcount;
?>
</font>
</body>
</html>

  • htca
  • Registratie: November 2001
  • Laatst online: 11:47
nu snap ik het, hij doet het inderdaad. Ik had het script inderdaad van een site gehaald. Overigens snap ik nog steeds niet waarom het script het wel doet op de server van de isp en niet lokaal.
Want mijn andere script doet het ook nog steeds niet.
edit: something added.

[ Voor 17% gewijzigd door htca op 17-01-2005 09:16 ]


  • htca
  • Registratie: November 2001
  • Laatst online: 11:47
Ok, ik ben een stapje verder. Als ik in mijn code op de juiste plek de error_reporting(E_ALL) zet, dan loopt het script. Echter wanneer ik deze weghaal of E_ALL door 0 vervang dan wordt de cookie niet gezet. Mijn eerste regels van login.php zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//set the start time so we can calculate how long it takes to load the page.
error_reporting(E_ALL);
$mtime1 = explode(" ", microtime());
$starttime = $mtime1[0] + $mtime1[1];
//require_once "../common/common.php";
if(eregi("supporter", $PHP_SELF) || eregi("admin", $PHP_SELF))
        require_once "../lang/$default_language.lang.php";
else
        require_once "lang/$default_language.lang.php";

session_start();
//if submit has been hit, set the cookie and reload the page immediately so the cookie takes effect.
if(isset($login))
{
        //if admin is contained in the url, we need to make sure the user is an
        //admin before letting them login.
        if(ereg("/admin", $HTTP_REFERER)){
                //check the user name and password against the database.
                if(checkUser($HTTP_POST_VARS['user'], md5($HTTP_POST_VARS['password']))){
                        if(isAdministrator($HTTP_POST_VARS['user'])){
                                $cookie_name = $HTTP_POST_VARS['user'];
                                session_register ("cookie_name");
                                $enc_pwd = md5($HTTP_POST_VARS['password']);
                                session_register ("enc_pwd");
                                $referer = $HTTP_REFERER;
                                header("Location: $referer");

etc...

Pas na de hele afhandeling van de authorisatie, wordt de header pas gezet. session_start(); naar voren halen heeft overigens ook geen zin. Als ik header("Location: $referer"); uitcomment, dan loppt de login wel, maar moet ik bij iedere pagina opnieuw inloggen (require once in iedere pagina)

Ik krijg dan deze meldingen:
code:
1
2
3
4
5
6
7
8
9
10
11
Notice: Undefined variable: id in /var/www/html/tickettracker/lang/English.lang.php on line 90

Notice: Undefined variable: id in /var/www/html/tickettracker/lang/English.lang.php on line 329

Warning: Cannot send session cookie - headers already sent by (output started at 
/var/www/html/tickettracker/lang/English.lang.php:90) in 
/var/www/html/tickettracker/common/login.php on line 46

Warning: Cannot send session cache limiter - headers already sent (output started at 
/var/www/html/tickettracker/lang/English.lang.php:90) in 
/var/www/html/tickettracker/common/login.php on line 46

Als ik vervolgens regel 90 uit mijn language file haal krijg ik geen errors meer, maar loopt het inlog script niet meer. Maw als er niets fout gaat, dan loopt het niet. Voor de goede orde, de languagefile ziet er zou uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$lang_powered = "Powered by";
$lang_processed = "Processed in";
$lang_seconds = "seconds";
$lang_queries = "Queries";
$lang_login = "login";
$lang_logout = "logout";
$lang_loggedinas = "You are logged in as";
$lang_ticket = "Ticket";
$lang_tickets = "Tickets";
$lang_info = "Information";
$lang_category = "Category";
$lang_categories = "Categories";
$lang_platform = "Product";
$lang_platforms = "Products";
$lang_opened = "Opened";
$lang_priority = "Priority";
$lang_priorities = "Priorities";

[ Voor 10% gewijzigd door htca op 17-01-2005 13:28 ]


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:34
Hij zal het lokaal waarschijnlijk niet doen, omdat je register_globals op OFF hebt staan. De meeste providers hebben deze setting op ON staan. Controlleer regel 365 even van C:\Windows\php.ini Op die regel staat register_globals = Off
bij je. Als je deze op ON zet, zal na een herstart van je webserver, deze wel werken. Er zijn wat nadelen en gevaren aan verbonden maar die moet je zelf even uitpluizen.

Deze setting (op ON) zorgt ervoor dat jouw variablen (die je met de URL of via een formulier of uit een sessie haalt) rechtstreeks met hun naam te benaderen zijn. En zo ik zie, wil je dat ook doen in je script.

http://nl2.php.net/manual....variables.predefined.php


tickettracker/lang/English.lang.php

Wil je betreffende regels 90 en 326 laten zien met wat omliggende code eromheen? want met {code} {/code} krijg je de interne regelnummering van GOT.

Het is trouwens ook niet de bedoeling dat je zomaar wat regeltjes weghaalt en ergens neerzet. Probeer je te verdiepen in wat de regel doet, en waarom hij daar staat.

[ Voor 54% gewijzigd door Cheater op 20-01-2005 14:54 ]

Pagina: 1