разделите сеанс между классическим 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 я не могу найти способ получить этот список ключей/значений. Может быть, это способ пойти и найти больше? Реальная существующая реализация помогла бы больше, но любые ответы приветствуются.

Author: halfer, 2013-09-05

3 answers

Я использовал это раньше для той же цели. Попробуйте перейти по этой ссылке http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=9028&lngWId=4

 0
Author: Nick Green, 2013-09-05 14:46:41

Я никогда раньше не использовал переменные сеанса в 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
Author: John, 2013-09-06 09:28:32

Вы можете сделать это, вызвав 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
%>
 0
Author: user4215456, 2017-02-13 12:22:48