[SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
Post Reply
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

[SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

Hallo,

ich steh' anscheinend schon den ganzen Tag auf dem Schlauch, aber $_SESSION[$_REQUEST["PHPSESSID"]] gibt den User der Session nicht aus.

Ich rufe über

Code: Select all

<a href="/template/inc_script/two.php" target="_self">test</a>
auf. In two.php steht einfach nur

Code: Select all

<?php
echo '>'.$_SESSION[$_REQUEST["PHPSESSID"]].'<'
?>
Was mache ich falsch, oder besser, wie mache ich es richtig ?

Ein kleiner Schubser in die richtige Richtung würde meinen Tag retten !


Vielen Dank !
Stefan
Last edited by ShyGuy on Wed 27. Apr 2011, 09:45, edited 1 time in total.
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by flip-flop »

Hi,

welcher User soll das denn sein???
Ein angemeldeter User?

sonst ersteinmal im /frontend_render/ testweise:

Code: Select all

dumpVar($_SESSION);
Und im wiki nach $_SESSION suchen.

knut
Last edited by flip-flop on Tue 26. Apr 2011, 18:14, edited 1 time in total.
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

also wenn ich das Ganze in den frontend_renderer lege:

Code: Select all

<?php
  $content['all'] = str_replace('{STATUS}', status(), $content['all']);
  function status() {
    $ausgabe = $_SESSION[$_REQUEST["PHPSESSID"]];
  return $ausgabe;
  }
?>
funktioniert es !?

Leider benötige ich die Ausführung des Scripts auf Mausklick und nicht grundsätzlich beim Aufruf der Seite, so dass ich immer noch nicht weiß, wie ich das lösen soll :?
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

dumpVar($_SESSION);
Na ja, gerade das ist ja mein Problem. Im frontend_renderer ist die Information vorhanden -nur wenn ich die PHP-Datei über den Link einbinde, geht sie mir flöten !
User avatar
juergen
Moderator
Posts: 4556
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by juergen »

was meinst du mit "Mausklick" ? Hast du ein Beispiel ?
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

Hallo !

Ein Beispiel ist ein wenig schwierig, da die Site on-line ist und ich nur begrenzt rumspielen kann.

Mit Mausklick meine ich folgendes Szenario:
Ich habe eine Handvoll Dateien in einem nicht öffentlichen Ordner. Im privaten Bereich der Site soll es nun einen Link geben, mit dem die dem Login entsprechende Datei gezogen werden kann; alle anderen Dateien dürfen keines Falls zugänglich sein.

Geplant war es, folgenden Code als HTML im privaten Bereich zu haben:

Code: Select all

<a href="/template/inc_script/external.php" target="_self">Deine Datei</a>
und dann über PHP wie folgt die Dateien durch zu reichen:

Code: Select all

<?php
downloadfile('../../files/'.$_SESSION[$_REQUEST["PHPSESSID"]].'.xls');

function downloadFile( $fullPath ){
  // noch nix gesendet...
  if( headers_sent() )
    die('Headers Sent');

  // Required for some browsers
  if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

  if( file_exists($fullPath) ){
   
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
   
    header("Pragma: public");

    // CACHE ausschalten !
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");

    //  Content-Disposition  =  attachment;  fordert  den  "Speichern-Dialog"
    header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );

    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$fsize);
    // output buffer sauber machen
    ob_clean();
    // Leert (sendet) den Ausgabepuffer
    flush();

    // Sendung !
    readfile( $fullPath );  // hier wird die Datei durchgereicht

  } else
	die('File Not Found');
}
?>
Leider ist $_SESSION[$_REQUEST["PHPSESSID"]] in diesem Fall absolut leer; als ob die Session beendet wurde.
Binde ich den Code über frontend_render ein, habe ich über $_SESSION[$_REQUEST["PHPSESSID"]] Zugriff auf den Login.

Ich schnall das nicht...
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

Mausklick = ich möchte die Datei nicht schon beim Laden der Seite zum Download anbieten, sonder erst auf Anforderung.
User avatar
juergen
Moderator
Posts: 4556
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by juergen »

Ja, dann musst du den User abfragen und die Dateien im Script (IM !!) verlinken. Schwierig wird das wenn du die von aussen nicht zugänglich haben möchtest.

Dei Deklaration muss im frontend-render script passieren, da das System sonst alle Umgebungsvariablen (somit auch den User) verliert, wenn du das anders aufsetzt. Wenn es nicht so viel Arbeit ist, schicke dich dir ein Muster ...
User avatar
juergen
Moderator
Posts: 4556
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by juergen »

Und irgendwo im Config muss die Sessioniererei auch zugelassen werden *anmerk*
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

Die Sessions habe ich selbstverständlich in der Config aktiviert - über ein Beispiel würde ich mich sehr freuen !

Wenn es eine Möglichkeit gibt, das Ganze in-line zu machen, ohne die Daten zu kompromittieren, wäre das auch sehr interessant :)


Danke !
User avatar
swisscheese
Posts: 138
Joined: Mon 19. Feb 2007, 16:37
Location: Solothurn, Schweiz

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by swisscheese »

Hallo

Eventuell musst du die Session in deiner Datei manuell starten:

Code: Select all

<?php
session_start();
echo '>'.$_SESSION[$_REQUEST["PHPSESSID"]].'<'
?>
Gruss, swisscheese
ShyGuy
Posts: 158
Joined: Sat 11. Nov 2006, 15:27
Location: DE-Hannover
Contact:

Re: $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by ShyGuy »

Juchu (!) das war's !

Vielen vielen Dank ! ich mach' mich jetzt mal an die Arbeit ;)
User avatar
juergen
Moderator
Posts: 4556
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by juergen »

Damit verlässt er das phpwcms Sicherheitskonzept aber total wenn er sowas überlagert... *grübel*
User avatar
swisscheese
Posts: 138
Joined: Mon 19. Feb 2007, 16:37
Location: Solothurn, Schweiz

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by swisscheese »

DF6IH wrote:Damit verlässt er das phpwcms Sicherheitskonzept aber total wenn er sowas überlagert... *grübel*
Das verlässt er ja sowieso, wenn er ein externes Skript aufruft. Ich hoffe, er wird seine Gründe dafür haben. Sauberer wäre sicher die Einbindung mit einem Frontendrender Skript oder gar Modul. Aber auch hier kannst viel verbocken :lol:
Der session_start überlagert ja gar nichts, er startet nur die Session, wenn im php.ini die session.auto-start nicht auf true gesetzt ist.

Gruss, swisscheese
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Re: [SOLVED] $_SESSION[$_REQUEST["PHPSESSID"]] ist leer

Post by flip-flop »

Ich würde das sicher nicht extern angreifen. Du bekommst die Dateien nicht so einfach versteckt.

Intern gibt es dazu eine recht einfache Lösung: [xdownload=IDs||t:ags||f:older-IDs/]

1. Eingebautes Login verwenden

2. Die betreffende User dort eintragen und den CP Login einsetzen und gegen die BE DB prüfen.

3. Nun in der Dateizentrale den betreffenden Dateien als "Tag/Schlagwort:" den Anmeldenamen des Users mitgeben.
- Vielleicht noch die Datei kennzeichnen mit "[x] geschützter Download im Frontend".

4. Diesen TAG einsetzen.
Wenn ein unsinniger Name für ein Template angegeben wird dann generiert der RT einen einfachen Link.

Code: Select all

<!--LOGGED_IN_START//-->
.....
[xdownload=t:[PHP]echo $_SESSION[$_REQUEST["PHPSESSID"]];[/PHP]:nix,,,1, /]
.....
<!--LOGGED_IN_END//-->
erzeugt einen Link:

Code: Select all

<ul class="fileDownload">
	<li><a href="download.php?f=ef08dfec18f369c305c0d0fe4a5adf3d" target="_self">doc-test.doc</a></li>
</ul>
Vorteil: Die Dateien sind ohne ein Login von außen nicht erreichbar, wenn die .htaccess in /filearchive/ aktiv ist.

Wenn die Identifikation gegenüber der Datei mit dem einfachen Useranmeldenamen zu schwach ist, weil das vielleicht ein recht einfacher Name sein könnte der mit anderen Tags verwechselt werden kann, dann den "Tag/Schlagwort:" künstlich erweitern und bei der Datei eintragen.
Z.B. ##Anmeldename##

Code: Select all

[xdownload=t:[PHP]echo '##'.$_SESSION[$_REQUEST["PHPSESSID"]].'##';[/PHP]:nix,,,1, /]

Natürlich kann bei einem brauchbaren CP-Listen Template anstelle von "nix" die ganze Sache schicker gestaltet werden.
Obendrein kannst du mehr als eine Datei anbieten bei der das Schlüsselwort trifft wenn nötig (aus der "1" wird dann z.B. ein "5").
Und es ist eine saubere interne Lösung bei der man nicht Gefahr läuft das System zu öffnen.

Knut
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
Post Reply