我们有一个多年来开发的ASP内部网Web应用程序,它运行在IIS6上。如今,我们希望使用PHP语言添加一些新功能。 PHP在同一台服务器上运行良好。需要在ASP和PHP之间共享会话变量。
我问是否有其他方法可以在经典ASP和PHP之间共享会话,而不是使用数据库作为网关(为我们消耗太多资源)?双方都需要读取/编辑会话变量。
稍微调整一下,我注意到每次用户登录ASP Web应用程序时都会在PHP端生成PHPSESSID和ASPSESSIONID。这些也可以在ASP端看到,它们存储在服务器变量HTTP_COOKIE中,所以我认为在IIS的核心ASP会话和PHP会话变量之间可能存在关联。
所以,
- ASP -
<% Response.write ('HTTP_COOKIE') %>
给出:
__utma=...; __utmz=...; computer%5Fid=AAA; lan=fre;ASPSESSIONIDXXXXXXXX=BBBBBBBBBBBBBBBBBBBBBBBB; user_login=cccc
- PHP -
echo '<pre>';
var_dump($_COOKIE) ?>
echo '</pre>';
给出:
Array
(
[__utma] => ...
[__utmz] => ...
[computer_id] => AAA
[lan] => fre
[ASPSESSIONIDXXXXXXXX] => BBBBBBBBBBBBBBBBBBBBBBBB
[user_login] => cccc
)
如果我写的话,在ASP方面:
<% Request.Cookies(strCookie)(strKey) %>
在循环中,它为我提供了存储的密钥/值会话cookie的串行列表。
但是在PHP方面,我找不到获取这些键/值列表的方法。可能是它的方式去寻找更多?一个真正存在的实现将有所帮助,但欢迎任何答案。
答案 0 :(得分:1)
之前我从未在PHP中使用会话变量,所以在这里我假设您已经为$ var1和$ var2分配了要传递给ASP文件的会话变量的值。
<iframe height="0" width="0" scrolling="No" src="setsession.asp?var1=<?php echo $var1; ?>&var2=<?php echo $var2; ?>"></iframe>
然后你的setsession.asp文件只是
<%
Session("var1") = Request.Querystring("var1")
Session("var2") = Request.Querystring("var2")
%>
显然你可以反过来这样做,你只需要了解如何用两种语言处理查询字符串和会话变量
答案 1 :(得分:0)
我之前使用过这个目的是为了同一个目的。试试这个链接http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=9028&lngWId=4
答案 2 :(得分:0)
您可以通过从PHP脚本调用 session.asp 来完成此操作。
PHP部分:
$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");
...和 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
%>