Reputation: 75
We have an ASP intranet web application that have been developed over years which is running on IIS6. Nowadays, we would like to add some new functionalities using PHP language instead. PHP is running fine on the same server. Sessions variables need to be shared between both ASP and PHP.
I am asking if there is other alternatives to share session between classic ASP and PHP instead of using database as gateway (too much resources consuming for us)? Both side need to read/edit session variables.
By tweaking a bit, I've noticed that a PHPSESSID and ASPSESSIONID is generated on PHP side every time a user is logged in the ASP web application. These are also visible on the ASP side, which are stored inside the server Variable HTTP_COOKIE, so I think there may be a correlation between ASP session and PHP sessions variables at the heart of IIS.
So,
-- ASP --
<% Response.write ('HTTP_COOKIE') %>
gives:
__utma=...; __utmz=...; computer%5Fid=AAA; lan=fre;ASPSESSIONIDXXXXXXXX=BBBBBBBBBBBBBBBBBBBBBBBB; user_login=cccc
-- PHP --
echo '<pre>';
var_dump($_COOKIE) ?>
echo '</pre>';
gives:
Array
(
[__utma] => ...
[__utmz] => ...
[computer_id] => AAA
[lan] => fre
[ASPSESSIONIDXXXXXXXX] => BBBBBBBBBBBBBBBBBBBBBBBB
[user_login] => cccc
)
on ASP side, if I write :
<% Request.Cookies(strCookie)(strKey) %>
in a loop, it gives me bunch list of key/values session cookies stored.
But on PHP side, I can't find a way to get these key/value list. May be it is the way to go and find more? A real existing implementation would help more but any answers are welcome.
Upvotes: 3
Views: 8117
Reputation: 327
Session in ASP.Net and GLOBAL in PHP are stored in process (unless changed) and they each have their own process. What you are asking is that the two processes somehow talk to each other and share data without major changes, and that is not possible. ASP.Net can be configured to store state in a database, which you could then get PHP to read and manipulate, but you specifically stated you didn't want that because of "too much resources".
Perhaps you shouldn't have changed languages and built half of your software in another language. You usually see this when someone joins who knows PHP better than ASP.Net and convinces people all new development should be in the language THEY are more familiar with. Once you have a code base in a language, stick with it. Warts and all. Now when you hire people instead of them just needing ASP.Net experience they also need to know PHP, and you run into "little" issues like you are having.
Upvotes: 0
Reputation: 79
You can do this by calling session.asp from PHP script.
PHP part:
$link = "$http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url=explode("/",$link);
array_pop($url);
$urlp=implode("/",$url)."/";
//here we get the url path
$ck=array_keys($_COOKIE);
for ($i=0;$i<count($ck);++$i) {
if (strpos($ck[$i],"ASPSESSIONID")===0) {
$cook .=$ck[$i]."=".$_COOKIE["$ck[$i]"].";"."<br>";
}//we need to pass ASPSESSIONID cookies to ASP script
}
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Cookie: ".$cook
)
);
//function for reading/writing ASP session values
function aspsession() {
global $urlp,$opts;
$n=urlencode(func_get_arg(0));
if (func_num_args()==2) {
$v=urlencode(func_get_arg(1));
return file_get_contents("$urlp../session.asp?n=$n&v=$v",NULL,stream_context_create($opts));
} else {
return file_get_contents("$urlp../session.asp?w=$n",NULL,stream_context_create($opts));
}//put the right relative URL for session.asp
//make sure it's in the same application as your other ASP scripts,
//so it has the same session
}
//to test if it works
aspsession("a","test");
echo aspsession("a");
...and the session.asp:
<% @Language = "VBScript"
ENABLESESSIONSTATE = True%>
<% Response.ContentType="text/plain" %>
<% Response.Expires=-1 %>
<%
n=Request.QueryString("n")
v=Request.QueryString("v")
if n<>"" then
session(n)=v
else
Response.Clear
Response.Write session(Request.QueryString("w"))
end if
%>
Upvotes: 0
Reputation: 4638
I've never used session variables in PHP before, so here I'm assuming that you have already assigned $var1 and $var2 the values of the session variables you want to pass to your ASP file.
<iframe height="0" width="0" scrolling="No" src="setsession.asp?var1=<?php echo $var1; ?>&var2=<?php echo $var2; ?>"></iframe>
Then your setsession.asp file would simply be
<%
Session("var1") = Request.Querystring("var1")
Session("var2") = Request.Querystring("var2")
%>
Obviously you could do this the other way around, you just need to understand how to handle querystring and session variables in both languages
Upvotes: 1