разделите сеанс между классическим ASP и PHP по сравнению с использованием базы данных
У нас есть веб-приложение для интрасети ASP, которое разрабатывалось в течение многих лет и работает на IIS6. В настоящее время мы хотели бы добавить некоторые новые функции, используя вместо этого язык PHP. PHP отлично работает на том же сервере. Переменные сеансов должны быть общими как для ASP, так и для PHP.
Я спрашиваю, есть ли другие альтернативы совместному сеансу между классическим ASP и PHP вместо использования базы данных в качестве шлюза (для нас слишком много ресурсов)? Обе стороны должны чтение/редактирование переменных сеанса.
Немного изменив настройки, я заметил, что PHPSESSID и ASPSESSIONID генерируются на стороне PHP каждый раз, когда пользователь входит в веб-приложение ASP. Они также видны на стороне 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 я не могу найти способ получить этот список ключей/значений. Может быть, это способ пойти и найти больше? Реальная существующая реализация помогла бы больше, но любые ответы приветствуются.
3 answers
Я использовал это раньше для той же цели. Попробуйте перейти по этой ссылке http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=9028&lngWId=4
Я никогда раньше не использовал переменные сеанса в 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")
%>
Очевидно, что вы могли бы сделать это наоборот, вам просто нужно понять, как обрабатывать строку запроса и переменные сеанса на обоих языках
Вы можете сделать это, вызвав session.asp из PHP-скрипта.
Часть 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");
...и сеанс .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
%>