Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: WebStyleBoard. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Mittwoch, 29. September 2004, 10:53

session-id trotz gzencode

dem ein oder anderen ist es eventuell schon aufgefallen, dass man sich hin und wieder entscheiden muss, ob man mit sessions arbeitet oder den output mit gzencode komprimiert

verwendet man gzencode dann bekommt man einen komprimierten binären string in dem php nicht mehr nach relativen urls suchen kann, die ggf. um die session-id erweitert werden müssen.

abhilfe schafft das hier (kurz getestet, scheint zu funktionieren):

PHP-Quelltext

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function add_sid($do_output false) {
  if (!$do_output) { //output buffering starten
    ob_start();
    ob_start('add_sid');
  }
  else { //SID anhängen
    // eigene url ermitteln
    $own_url = isset($_SERVER['HTTPS']) ? 'https://' 'http://';
    $own_url .= $_SERVER['HTTP_HOST'];
    $content preg_replace('%<a([^>]+)href="([^>"\s]+)"%ie',
    '"<a$1href="" . absolute("$2", $own_url) . """',
    $do_output);
    return $content;
  }
}

function get_content() {  // um SID erweiterten inhalt liefern
  ob_end_flush();
  $content ob_get_contents();
  ob_end_clean();
  return $content;
}

function absolute ($relative$absolute) { //relative urls um SID erweitern
  if (preg_match('%^(https?://|[URL]ftp://[/URL]|mailto:|news:)%i'$relative) 
    // url ist schon absolut
   and !preg_match('%^('.$absolute.')%i'$relative)) 
   //und verweist nicht auf eigene domain
    return $relative;

  if (strlen(SID) == 0)
    return $relative;  // keine session gestartet oder cookie vorhanden

  //url bearbeiten
  $url parse_url($absolute);
  if ($url['path']{strlen($url['path']) - 1} == '/')
    $dir dirname(substr($url['path'], 0strlen($url['path']) - 1));
  else
    $dir dirname($url['path']);

  if ($relative{0} == '/') { //link auf startseite (domain)
    $relative substr($relative1);
    $dir '';
  }
  elseif (substr($relative02) == './'//link auf aktuelles verzeichnis
    $relative substr($relative2);
  else while (substr($relative03) == '../') { //pfadangaben verarbeiten
    $relative substr($relative3);
    $dir substr($dir0strrpos($dir'/'));
  }
 
  $relative parse_url($relative);
  if (!empty($relative['query'])) //es gibt schon parameter, SID anhängen
    $relative $relative['path'].'?'.$relative['query'].'&amp;'.SID;
  else
    $relative $relative['path'].'?'.SID;

  return sprintf('%s://%s%s/%s'$url['scheme'], $url['host'], $dir$relative);
}
der aufruf ist denkbar einfach:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
add_sid();

echo '<a href="a.php?a=b">a</a>';
?>
<a href="?x=y">Test</a>
<?php
echo '<a href="a.php">b</a>';

$content get_content();
?>
$content enthält jetzt den kompletten output, wo die session-id angehängt werden musste, wurde sie auch angehängt

momentan werden nur links ersetzt, alternativ könnte man add_sid dahingehen erweitern, dass man auch img-tags erweitert (soll ja manchmal nötig sein), aber das sollte jetzt ja nicht mehr so schwer sein ;)
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

2

Donnerstag, 30. September 2004, 10:32

RE: session-id trotz gzencode

ich hab das mal freigeschaltet ... auch wenn sich mir der Sinn dessen nicht hundertprozentig erschliesst. :suspicious:

Zitat

dem ein oder anderen ist es eventuell schon aufgefallen, dass man sich hin und wieder entscheiden muss, ob man mit sessions arbeitet oder den output mit gzencode komprimiert


warum denn nicht die session-id gleich anhängen?

PHP-Quelltext

1
2
3
4
5
6
7
<?
echo '<a href="a.php?a=b&sid=".$sessionid."">a</a>';
?>
<a href="?x=y&sid=<? echo $sessionid; ?>">Test</a>
<?php
echo '<a href="a.php?sid=".$sessionid."">b</a>';
?>


oder hab ich hier gerade nen Denkfehler?
Signatur von »TheNobody Style«

3

Donnerstag, 30. September 2004, 12:23

RE: session-id trotz gzencode

Zitat von »TheNobody Style«

ich hab das mal freigeschaltet ... auch wenn sich mir der Sinn dessen nicht hundertprozentig erschliesst. :suspicious:
[...]
warum denn nicht die session-id gleich anhängen?
naja, hin und wieder will (zumindest mein bescheidener kreis an kunden), dass eine wie auch immer geartete template-engine verwendet wird, z. b. smarty

und versuche den leuten, die die templates erstellen, zu erklären, dass und warum sie hinter welchem link immer eine variable einzufügen haben und hinter welchem nicht, vor allem, wenn sie nicht gefüllt wird, da der user cookies akzeptiert, haben sich als mitunter recht... naja... interessant erwiesen


was nicht ausschließen soll, dass ich hier nen denkfehler habe
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

4

Donnerstag, 30. September 2004, 14:22

RE: session-id trotz gzencode

Zitat von »mr_happiness«


und versuche den leuten, die die templates erstellen, zu erklären, dass und warum sie hinter welchem link immer eine variable einzufügen haben und hinter welchem nicht, vor allem, wenn sie nicht gefüllt wird, da der user cookies akzeptiert, haben sich als mitunter recht... naja... interessant erwiesen

oki .. an die möglichkeit, dass man die Templates nicht selber bastelt hab ich gar nicht gedacht ... dann macht das natürlich Sinn :)
Signatur von »TheNobody Style«