Avatar billede sjh Nybegynder
10. februar 2008 - 13:53 Der er 16 kommentarer og
1 løsning

preg_replace_callback split url

Jeg har lavet den her som næsten funker, dog har jeg lidt problemer med at få den til at virke med "#blabla"
Iden er at den selv skal gennemsøge for links og tilføje et session id efter, her kommer der så et lille problem
med alle de links som har "#blabla" på.. og så kunne det sikkert optimeres lidt mere :D

<pre>
<?php
  $sid = 'sid=b8c1a3069167247e3503f0daba6c5723';
  $host = 'www.this.dk'; /* $_SERVER['HTTP_HOST']; */
 
  $htmlCode =
  '<a href="http://www.this.dk/">this server</a>
  <a href="http://www.server1.dk/">server1</a>
  <a href="/page/page.php">this server</a>
  <a href="http://www.this.dk/page/page.php#blabla">this server</a>
  <a href="http://www.this.dk/page.php?sid=blabla">this server</a>';
 
  // $htmlCode = '<a href="http://www.this.dk/page/page.php#blabla">this server</a>';

  $htmlCode = preg_replace_callback('#(href=")(.*)(")#', '__callback_sid', $htmlCode);

  function __callback_sid($array)
  {
    global $sid, $host;
   
    print_r($array);
   
    $url = $array[2];
    if (isset($sid) && isset($host))
    {
      if (eregi('http://'.$host, $url) || !eregi('http://', $url))
      {
        if (!preg_match('#sid=#', $url))
        {
          $url .= ((strpos($url, '?') !== false) ? '&amp;' : '?').$sid;
        }
      }
    }
   
    return $array[1].$url.$array[3];
  }
 
  echo $htmlCode;
?>
</pre>
Avatar billede windcape Praktikant
10. februar 2008 - 15:08 #1
"Iden er at den selv skal gennemsøge for links og tilføje et session id efter"
- Hvorfor skal den det?
Avatar billede sjh Nybegynder
10. februar 2008 - 15:20 #2
Det skal den fordi hvis bruger ikke tillader at browser bruger session så skal den tilføje session (sid=) sammen med query-string, men den skal kun gøre det på de links som tilhør serveren ($_SERVER['HTTP_HOST'])
Avatar billede sjh Nybegynder
10. februar 2008 - 15:51 #3
windcape : kan du hjælpe ??
Avatar billede limemedia Nybegynder
11. februar 2008 - 11:13 #4
hvis en bruger ikke tillader en session at koere, er manden saa dum at han ikke boer ind paa din side ...

jeg ville loese problemet med en informations side at han skal slaa hans cookies til og JS mens han nu er igang

og hvis du dykker ned i dokumentationen, kan du under session sektionen http://jp.php.net/session laese foelgende

PHP is capable of transforming links transparently. Unless you are using PHP 4.2.0 or later, you need to enable it manually when building PHP. Under Unix, pass  --enable-trans-sid to configure. If this build option and the run-time option session.use_trans_sid are enabled, relative URIs will be changed to contain the session id automatically
Avatar billede sjh Nybegynder
11. februar 2008 - 12:52 #5
Jeps det er også fint nok, hvis man benytter php's egen session!

Det er så ikke tilfældet, da Jeg bruger MySQL til at holde styr på mine session.

Men nu "tror" jeg nok den er der, lidt bøvlet kode men det ser ud til at virke..

<pre>
<?php
  $host = $_SERVER['HTTP_HOST'];
  $sid = 'sid=b8c1a3069167247e3503f0daba6c5723';
  $htmlCode ='
  <a href="/">'.$host.'</a>
  <a href="/index.php?arg=value">'.$host.'</a>
  <a href="/index.php?arg=value#value">'.$host.'</a>
  <a href="/index.php?arg1=value&arg2=value">'.$host.'</a>
  <a href="/index.php?arg1=value&arg2=value#value">'.$host.'</a>

  <a href="/index.php?arg=value&sid=TEST">'.$host.'</a>
  <a href="/index.php?arg=value&sid=TEST#value">'.$host.'</a>
  <a href="/index.php?arg1=value&arg2=value&sid=TEST">'.$host.'</a>
  <a href="/index.php?arg1=value&arg2=value&sid=TEST#value">'.$host.'</a>

  <a href="'.$host.'">'.$host.'</a>
 
  <a href="http://'.$host.'/index.php?arg=value">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg=value#value">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg1=value&arg2=value">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg1=value&arg2=value#value">'.$host.'</a>

  <a href="http://'.$host.'/index.php?arg=value&sid=TEST">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg=value&sid=TEST#value">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg1=value&arg2=value&sid=TEST">'.$host.'</a>
  <a href="http://'.$host.'/index.php?arg1=value&arg2=value&sid=TEST#value">'.$host.'</a>
 
  <a href="http://server.dk/index.php?arg=value">anden server</a>
  ';
 
  $htmlCode = preg_replace_callback("/(a href=\")([a-z0-9~#%@&:;=!',_?\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "__callback_sid", $htmlCode);

  function __callback_sid($array)
  {
    global $sid;
    $url = $array[2];
   
    $parse = parse_url($array[2]);
   
    $host = isset($parse['host'])?$parse['host']:''; /* hostname */
    $path = isset($parse['path'])?$parse['path']:''; /* /path */
    $query = isset($parse['query'])?'?'.$parse['query']:''; /* arg=value */
    $scheme = isset($parse['scheme'])?$parse['scheme']:''; /* http */
    $fragment = isset($parse['fragment'])?'#'.$parse['fragment']:''; /* #name */
   
    if ($host == $_SERVER['HTTP_HOST'] || $host == '')
    {
      $url = ($scheme.(($host)?'://'.$host:'').$path.$query);
      if (!ereg('sid=', $url))
      {
        $url .= ((!ereg('\?', $url))?'?':'&').$sid;
      }
      $url .= $fragment;
    }
    return $array[1].$url;
  }
 
  echo htmlentities($htmlCode);
?>
</pre>
Avatar billede limemedia Nybegynder
11. februar 2008 - 13:01 #6
brug php's egen til at generere dit sid, og lig resten i din database - to fluer med et smaek

din egen model begraenser dig i udfoldesmuligheder
Avatar billede sjh Nybegynder
11. februar 2008 - 13:03 #7
Avatar billede limemedia Nybegynder
11. februar 2008 - 13:15 #8
hvis det virker for dig :)
for mig, ligner det et unoedvendigt overhead og en mulig fejlkilde der vil vaere svaer at komme af med i fremtiden ...
Avatar billede sjh Nybegynder
11. februar 2008 - 14:06 #9
limemedia : Ja det er vel ikke svære at komme af med end hvis det er et navn i en query-string.

Du skriver at Hvis en bruger ikke tillader en session, er manden dum..

Det vil svare til at indehaveren af forretningen siger til dig,
Jeg skal lige ligge se hvad du har i dine lommer, før du må komme ind.

Ville du lade indehaveren gøre det ?? Nej vel.. Så manden er ikke dum.
Avatar billede limemedia Nybegynder
11. februar 2008 - 14:21 #10
Er du sikker ? :)

... og laeste jeg ikke forleden paa dr.dk at en eller anden guldsmed i Koebenhavn har indfoert fingeraftryk for at komme ind i forretningen

Tilbage til emnet, jeg sidder med en lille side der generer et par millioner dollars om aaret, 70.000-80.000 daglige brugere ... Har lagt min sid i en cookie der referer til en post i databasen (med ejercheck naturligtvis) - jeg tror vi har en eller to om aaret der kommer forbi med cookies slaaet fra, de ringer og vi siger "vil du bruge vores side, maa du slaa cookies til". Maaske er det blot fordi vores side er saa god at ingen kan undvaere den (host host), eller maaske fordi det ikke er saa slemt alligevel med de smaakager
Avatar billede windcape Praktikant
14. februar 2008 - 21:04 #11
Har aldrig hørt om browsere der blokere for querystring værdier....

PHP tilføjer selv ?sid=<SID> til alle links, hvis der ikke benyttes cookie sessions. (kan indstilles i php.ini)

Post #1 var direkte ment på at din ide er dum, og baseret på uvidenhed.
Avatar billede sjh Nybegynder
15. februar 2008 - 00:18 #12
Ja uvidenhed.. så kan jeg ikke forstå hvorfor fx. phpBB2 har en funktion som tilføjer ?sid= efter en givet url.. ??
Avatar billede windcape Praktikant
16. februar 2008 - 17:21 #13
Læs mit indlæg igen...

Desuden så er phpbb kodet af idioter.
Avatar billede sjh Nybegynder
17. februar 2008 - 13:16 #14
Det kan godt være at php selv tilføjer ?sid=<SID> men tror ikke den gør det nå jeg ikke benytter mig af session_start()

"phpBB kodet af idioter." Ja så meget idioter er de da heller ikke, der er mange som bruger deres kode (Forum) Men alt som ikke er kodet af dig (windcape) er vel idioter i dine øjne.

Hvis der er nogle af jer som vil have point så smid et svar.
Avatar billede sjh Nybegynder
17. februar 2008 - 13:22 #15
windcape : "Har aldrig hørt om browsere der blokere for querystring værdier" -> DET HAR JEG HELLER IKKE SKREVET NOGET OM!

Det jeg skriver er "Hvis bruger ikke tillader at browser bruger session så skal den tilføje session (sid=)"
http://www.eksperten.dk/spm/818823#rid7022850
Avatar billede sjh Nybegynder
25. februar 2008 - 12:05 #16
Kan i ikke smide et par. svar..
Avatar billede sjh Nybegynder
27. februar 2008 - 15:53 #17
Når hvis i ikke vil have point så tager jeg dem da bare selv..

Tak for jeres input..
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