Avatar billede webweaver Praktikant
08. april 2012 - 21:01 Der er 12 kommentarer og
1 løsning

Loginproblemer med www i url

Godaften mennesker,

Jeg arbejder på et CMS system og har lige tilfældigt opdaget, at der er nogle problemer med det, afhængig af om der er www først i adressen eller ej. Det virker upåklageligt, hvis adressen hedder http://hjemmeside.dk/cms .. Men hvis der skrives http://www.hjemmeside.dk/cms, så fungerer det ikke just, når man prøver at logge ind. Loginform osv. videre vises. Du kan logge ind og det godkendes, men så smides man ellers direkte ud igen og alle sessioner destrueres. (andre gange kommer der bare en browserfejl om at siden ikke kan vises)

Jeg benytter mig af rewriteRule og rewriteCond i forbindelse med systemet i en .htaccess, og jeg er næsten også helt stensikker på, at problemet/løsningen ligger der et sted. Jeg kan dog ikke helt hitte ud af, hvor eller hvorfor der er forskel.

En regel taget tilfældigt fra min .htaccess

RewriteCond %{REQUEST_URI} !(\.(gif|jpg|png|css)$)
RewriteRule indstillinger settings.php


Sådan ser den typiske regel ud. Dem er der flere af derned  af ... Forstår dog ikke, hvorfor det driller. Om der er www eller ej i url'en burde ikke gøre en forskel da REQUEST_URI ikke fokuserer på den del af url'en ...

Et simpelt link i systemet kan se således ud,

<a href="indstillinger">link ..</a>

Andre steder er det nødvendigt med absolutte stier, da der include's filer i flere lag (folder in folder),



Udgør det et problem? Det var først her jeg opdagede problemet, da jeg jo har www med i den absolutte sti og man pludselig blev smidt ud af systemet ved at skifte imellem lag.

Håber der er nogen som har lidt input, der kan hjælpe mig på vej? :)

Og fortsat god Påske :D
Avatar billede erikjacobsen Ekspert
08. april 2012 - 21:27 #1
Det "plejer" at være fordi webserveren er sat forkert på, så cookies sat på hjemmeside.dk ikke kan ses på ww.hjemmeside.dk - eller omvendt ... husker det ikke lige. Din cookie indeholde id til en session, som sikkert er der du checker om man er logget ind.
Avatar billede webweaver Praktikant
09. april 2012 - 19:25 #2
Okay. Det lyder ikke som en indstilling man selv kan ændre på?
Medmindre man personligt er administrator for den server man benytter naturligvis.

Hvad kan så anbefales? Så er vi ovre i noget med at påvinge eller fjerne www i alt der indtastes via rewriteRule? Så man enten kører systemet med eller uden www udelukkende.

Det syntes jeg dog ikke virkede ellers, da jeg har prøvet det som noget af det første.
Avatar billede erikjacobsen Ekspert
09. april 2012 - 19:40 #3
Svært at sige når vi ikke ved mere om dit setup. Men det lyder som Apache, og dermed formentlig PHP.

I PHP kan du i begyndelsen af hver side bruge http://www.php.net/manual/en/function.session-set-cookie-params.php - dvs funktionen session_set_cookie_params - du kan læse om det på linket.

Og ja, man kan sagtens diskutere om det er en "forkert" opsætning ... der er fordele og ulemper.
Avatar billede pcdl2 Praktikant
11. april 2012 - 12:18 #4
Hvis du ikke har andet på dit domæne kan du evt bruge dette her
session_set_cookie_params(0, '/', '.domain.com');
Så gemmer den dine cookies uanset om du er på www eller uden
Avatar billede webweaver Praktikant
15. april 2012 - 15:48 #5
Så har jeg endelig haft lidt tid til at kigge på det :o)

Erik, det er Apache og PHP, ja :)

Der skulle lige arbejdes lidt med det, da det skulle automatiseres mere end det oplyste herinde, hvor man selv skal udfylde session_set_cookie_params. Det skal man ikke længere, da det sker automatisk i forbindelse med en installation af systemet...

Men jo pcdl2, der er andet på domænet. Det er jo et CMS, så der ligger et helt site foran. Det vil være forskellige sites, da det er til kommercielt brug. Men det burde umiddelbart ikke udgøre en risiko for at skabe problemer alligevel, så vidt jeg lige kan gennemskue.

Anyways, det virker i hvert fald nu ud fra jeres ideer.
I kan begge smide et svar :-)

Fortsat god weekend.
Avatar billede erikjacobsen Ekspert
15. april 2012 - 15:51 #6
Ingen point til mig, tak.

Den indstilling du har nu betyder også at du deler sessioner med andre sub-domæner du måtte have, ud over www.
Avatar billede webweaver Praktikant
15. april 2012 - 16:14 #7
Ja det gør det. Dem har jeg ikke nogen af umiddelbart. Men det har en anden kunde måske. Men udgør det en reel risiko sikkerhedsmæssigt?

Jeg er lidt imod det, da det må være sådan, at jo flere steder sessioner findes, jo flere steder kan de hijackes og lignende. Desuden bør de holdes udelukkende der, hvor de skal bruges, da det andet er rod i min verden.

I princippet kan konflikter opstå, hvis en kunde har et eksisterende PHP system kørende på et subdomæne fx. Hvis de rent tilfældigt har en session som hedder det samme som en fra mit CMS system, kan man i princippet risikere at kundens session overskriver CMS systemets eller omvendt, da de er tilgængelig på tværs af sitet nu? Det vil ej heller være smart.

Jeg kan dog ikke se, hvad løsningen ellers kan være?

Så skal man udvikle systemet til at være kompatibelt kun med www eller uden www i adressen?
Avatar billede erikjacobsen Ekspert
15. april 2012 - 17:18 #8
Det er vel kun et problem, hvis man i samme session tilgår subdomænerne samtidig, og de ligger på samme server. Den løsning jeg foretrækker, er at videredirigere alt fra www.mitdomæne.dom til mitdomæne.dom, og kun på den sidste ligger siderne. Så kan sessionen sættes til kun at virke på mitdomæne.dom.
Avatar billede webweaver Praktikant
30. juni 2012 - 14:23 #9
Hej Erik

Så er jeg tilbage. Jeg beklager den lange periode, jeg har været tråden fraværende. Der har været travlt med afslutning på en videregående uddannelse. Men det er overstået nu.

Back to topic. Det er også den løsning jeg foretrækker.
Jeg er ikke interesseret i, at sessioner kan tilgås fra subdomæner etc. Det er ikke så heldigt i mine øjne.

Derfor var det også den første løsning jeg forsøgte mig med, før jeg oprettede tråden her, men jeg kan simpelthen ikke få det til at virke. Det er super irriterende!

Min mappestruktur er således root / CMS / diverse filer og mapper ...

I root kan ligge et hvilket som helst givent website, som CMS-systemet nu en gang skal operere med. Det er kun det inde i CMS-mappen, som skal påvirkes af min regel - altså at www fjernes.

Derfor smider jeg en .htaccess fil ind inde i CMS mappen med følgende indhold:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.lasse-jensen.com$ [NC]
RewriteRule ^(.*)$ http://lasse-jensen.com/$1 [R=301,L]


Det fungerer ikke. Jeg har prøvet at rette stierne til ved at tilføje /cms og så videre, men stadig ingen effekt.

Hvis jeg smider det ovenstående kode ud i root mappen, så virker det til gengæld - bare ikke i CMS mappen (eller andre undermapper formentlig), og så kan det jo være ligegyldigt.

Det er lidt frustrerende efterhånden. For pokker da!

Hvordan skal det sættes op, for at jeg har en virksomhed rewriteUrl i CMS-mappen og kun der?

På forhånd tak og fortsat god weekend.
Avatar billede erikjacobsen Ekspert
30. juni 2012 - 16:09 #10
En længere diskussion i http://www.eksperten.dk/spm/964737 for een der gerne vil have samme session-cookies med og uden www kan vel også bruges her.

For hvert subdomæne, fx banan.mitdomæne.dk, kan man sætte

  session_set_cookie_params ( 0, "/", ".banan.mitdomæne.dk");

og så bør den ikke kunne ses andre steder fra. Bør sættes i .htaccess, og ikke på hver side.
Avatar billede webweaver Praktikant
01. juli 2012 - 15:49 #11
Vil også helst ordne det fra .htaccess. Men umiddelbart kan jeg ikke få det til at fungere. Det burde ellers være opsat til moduldrift skulle jeg mene.

Har blandt andet forsøgt mig med,

php_flag session.cookie_domain .hjemmeside.dk og
php_value session.cookie_domain .hjemmeside.dk

Ingen succes der, så jeg prøvede med ini_set, men heller ikke det store held der.

ini_set("session.cookie_domain", ".hjemmeside.dk");

Så det er endt med, at jeg benytter mig af session_set_cookie_params.

session_set_cookie_params(0, "/cms", "." . str_replace("www.", "", parse_url($_SERVER["HTTP_HOST"], PHP_URL_PATH)));

Den fungerer og holder cookies inden for cms mappen og da jeg alligevel includer noget sikkerhedskontrol på alle sider, kan det tilføjes der og dermed fremgå på alle sider som det er nødvendigt.
Avatar billede erikjacobsen Ekspert
01. juli 2012 - 21:32 #12
Om man kan sætte det i .htaccess eller i en lokal .ini fil afhænger af opsætningen af PHP.
Avatar billede webweaver Praktikant
01. juli 2012 - 23:05 #13
Ja det ved jeg godt. Det er på et Surftown webhotel, så jeg vil næsten tro, at opsætningen burde være til det. Men det fungerer ikke. Pyt med det. Jeg holder mig til det andet i første omgang.

Tak for hjælpen.
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

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