[.htaccess] PHP session vars uitlezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Beste tweakers

Ik wil graag het volgende:
Ik heb een CMS waar ik een directory admin heb. In deze directory wil ik een htacces file maken met een rewriterule/alias rule wil aanmaken. Het gaat om de requests die binnenkomen voor de css en img direcory’s. Deze bestaan niet op die plek. Ik heb deze in de directory in template/css staan.

Dit is vrij simpel te maken en heb ik al werkend alleen zou ik graag willen kijken of er een PHP sessie bestaat en de inhoud van de session variabele uitlezen. Ik wil alleen ingelogde gebruikers toestaan om de images en stylesheet op te vragen.

Er moet dus een if statement komen die kijkt of de PHP session bestaat. Het liefst zou ik session variabele kunnen uitlezen zodat ik in de toekomst verschillende templates voor mijn CMS kan maken.

Is het mogelijk wat ik hier beschrijf? Ik heb al gegoogled en de documentatie van Apache door gelezen maar ben niets wijzer geworden. Ik heb dit volgens een keer gelezen of gehoort dat het wel kon maar kan er niets over vinden ook niet op GoT.

Hebben jullie ideeën en tips dan hoor ik ze graag. Alvast bedankt voor het lezen van deze topic.

W3designer.nl


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Hmm, dit is inderdaad intressant om te weten. Als zoiets zou kunnen zou dat direct een huge probleem van mij ook oplossen :)

Wat wellicht ook een optie is om iets uit MySQL te kunnen lezen, zoals je met mod_auth ook tegen MySQL kan authoriseren.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Wat jij wilt is niet mogelijk. Op het moment dat apache de opdrachten in de .htacces bestanden uitvoerd heeft deze nog geen enkele notie van php. Php zelf doet op dat moment nog helemaal niet mee voor dat request. Pas wanneer apache klaar is met het apache gebeuren en blijkt dat het uiteindelijke request door php afgehandeld dient te worden komt php pas om de hoek kijken. Pas op dat moment is met zekerheid vast te stellen dat er een sessie is en wat daar in staat.

Wat jij wilt is wel te bereiken door de img en css bestanden niet rechtstreeks, maar via een php script op te vragen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Janoz schreef op zondag 20 augustus 2006 @ 22:04:
Wat jij wilt is niet mogelijk. Op het moment dat apache de opdrachten in de .htacces bestanden uitvoerd heeft deze nog geen enkele notie van php. Php zelf doet op dat moment nog helemaal niet mee voor dat request. Pas wanneer apache klaar is met het apache gebeuren en blijkt dat het uiteindelijke request door php afgehandeld dient te worden komt php pas om de hoek kijken. Pas op dat moment is met zekerheid vast te stellen dat er een sessie is en wat daar in staat.

Wat jij wilt is wel te bereiken door de img en css bestanden niet rechtstreeks, maar via een php script op te vragen.
Hmmm jammer. Was idd eerder idee van hoe ik dat wel oplossen. Dan maar rewriterule die het aan een bestand ~img.php door geeft ofzo.
code:
1
2
RewriteEngine On 
RewriteRule ^img/(.*)$ ./~img.php?file=$1

Dan laat ik ik het PHP script de inhoud wel lezen door readfile() methode. Heb ik nog wel een vraag hoe kan ik simpel de mime type van een file opvragen in PHP. Zodat ik de header wel goed mee kan sturen :) met de methode header().

Ik weet dat er nog geen instantie draait van PHP zodra een request bij Apache binnenkomt. Maar ik dacht dat er een module bestond die in PHP sessiondata directory kon kijken. Aan de hand daarvan kan oordelen of er een sessie was. Gezien PHP dit plaintext opslaat in verschillende files voor een sessie.

W3designer.nl


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Er is geen garantie dat php dit altijd opslaat. Als iemand eigen sessionhandlers gebruikt kan het best zijn dat die gegevens in een DB staan of gewoon in het geheugen. Daarnaast weet je niet of die bestanden valide zijn (het kan best zijn dat php de garbage collector aanroept en net die ene sessie op gaat ruimen. Volgens je rewrite rule is er dan wel een sessie terwijl hij er tijdens het script niet meer is).

Het mimetype kun je op dezelfde manier bepalen als Apache dat doet. Gewoon een lijst met extenties en daarbij het juiste mimetype. Deze kun je simpel met een case statement in je php bestand zetten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Janoz schreef op zondag 20 augustus 2006 @ 23:26:
Er is geen garantie dat php dit altijd opslaat. Als iemand eigen sessionhandlers gebruikt kan het best zijn dat die gegevens in een DB staan of gewoon in het geheugen. Daarnaast weet je niet of die bestanden valide zijn (het kan best zijn dat php de garbage collector aanroept en net die ene sessie op gaat ruimen. Volgens je rewrite rule is er dan wel een sessie terwijl hij er tijdens het script niet meer is).

Het mimetype kun je op dezelfde manier bepalen als Apache dat doet. Gewoon een lijst met extenties en daarbij het juiste mimetype. Deze kun je simpel met een case statement in je php bestand zetten.
Oké dus je moet zelf case statement met alle mogelijke afbeelding formaten maken is niet iets bestaands voor.

Uhm nog een vraag zit altijd te klooien met reguliere expressie voor het uitsluiten dat bestanden van hogere dir bereikbaar worden door mijn PHP scriptje. Zou deze regelurie expressie voldoen?

$file = preg_replace("\\.|\\.\\.", '', $file);

W3designer.nl


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Hoe denk je dat bestaande oplossingen werken? ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Janoz schreef op zondag 20 augustus 2006 @ 23:37:
Hoe denk je dat bestaande oplossingen werken? ;)
hehe zelfde manier ;) maja als iemand al zo iets heeft getypt scheeld mij dat :P maar zou wel case maken heb toch alleen jpg of gif ben dan nog wel een keer klaar O-)

W3designer.nl


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Janoz schreef op zondag 20 augustus 2006 @ 23:26:
Het mimetype kun je op dezelfde manier bepalen als Apache dat doet. Gewoon een lijst met extenties en daarbij het juiste mimetype. Deze kun je simpel met een case statement in je php bestand zetten.
Dat is vrij omslachtig, en bovendien kun je PHP dan makkelijk voor de gek houden door blah.zip te hernoemen naar plaatje.gif. Hiervoor gebruikte ik daarom altijd mime_content_type, maar ik zie nu die deprecated is. In plaats daarvan kun je de Fileinfo functies gebruiken.
Pagina: 1