note 53809 added to ref.session
| From: | Richard | Date: | Tue, 14 Jun 2005 02:44:27 +0000 |
| Subject: | note 53809 added to ref.session | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-90388@lists.php.net to get a copy of this message | ||
Having to use transparent on a system where trans_sid was not compiled, I came up with the folowing
ob_start handler:
<?php
function ob_sid_rewrite($buffer){
$replacements = array(
'/<\s*(a|link|script)\s[^>]*(href|src)\s*=\s*"([^"]*)"/',
'/<\s*(a|link|script)\s[^>]*(href|src)\s*=\s*\'([^\'<>]*)\'/',
);
$buffer = preg_replace_callback($replacements, "pa_sid_rewriter", $buffer);
$buffer = preg_replace('/<form\s[^>]*>/',
'\0<input type="hidden" name="' . session_name() . '"
value="' . session_id() . '"/>', $buffer);
return $buffer;
}
function pa_sid_rewriter($matches){
$buf = $matches[0];
$url = $matches[3];
$url_orig=$url;
if ($url[0]=='/' || $url[0]=='#' || preg_match('/^[A-Za-z0-9]*:/',
$url))
return $buf;
$ses_name = session_name();
if (strstr($url, "$session_name="))
return $buf;
$p = strpos($url, "#");
$ref = false;
if($p){
$ref = substr($url, $p);
$url = substr($url, 0, $p);
}
if (strlen($url)==0)
return $buf;
if (!strstr($url, "?"))
$url.="?";
else
$url.="&";
$url.=session_name() ."=".session_id();
if($ref)
$url.=$ret;
return str_replace($url_orig, $url, $buf);
}
?>
It adds a field to urls and a fake form entry.
You can start the rewrite by doing the folowing at the start of the script:
<?php
function pa_set_trans_sid(){
if ( defined('SID') ){ // use trans sid as its available
ini_set("session.use_cookies", "0");
ini_set("session.use_trans_sid", "true");
ini_set("url_rewriter.tags", "a=href,area=href,script=src,link=href,"
. "frame=src,input=src,form=fakeentry");
}else{
ob_start('ob_sid_rewrite');
}
}
?>
----
Manual Page -- http://www.php.net/manual/en/ref.session.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+53809
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+53809&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+53809&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+53809&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+53809&report=yes&reason=useless
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+53809&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+53809&report=yes
Search -- http://master.php.net/manage/user-notes.php