在父应用程序和虚拟目录之间传递数据

时间:2020-03-05 18:54:47  来源:igfitidea点击:

我有一个在虚拟目录中作为子应用程序运行的应用程序。

我想从父应用程序传递一个值,但我相信Session是按应用程序键入的,因此无法正常工作。

更复杂的是,父应用程序是WebForms,子应用程序是NVelocity MVC。

有谁知道让我在虚拟应用程序之间使用某种会话类型功能的技巧?

编辑:Web服务并不是我真正想的,我需要做的就是将登录用户的用户名传递给子应用程序。此外,如果在父服务器上调用Web服务,我将不会获得相同的会话,因此我将不知道哪个用户。

解决方案

回答

听起来像Web服务是要走的路。我们可以执行以下操作:

  • 让WebForms应用程序使用与其关联的某种密钥在其数据库中创建一些数据。
  • 将URL中的密钥传递给NVelocity MVC应用程序。
  • 允许NVMVC应用程序使用传递的密钥在WebForms应用程序上调用Web服务(REST,XML-RPC,SOAP等)。

这将解决我们可能遇到的任何类型的会话键控或者cookie域问题,并允许我们传递一些结构良好的数据。

回答

我们可以执行服务器端HTTP请求,在C#中看起来像这样:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("/ASPSession.ASP?SessionVar=" + SessionVarName);
req.Headers.Add("Cookie: " + SessionCookieName + "=" + SessionCookieValue);

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream receiveStream = resp.GetResponseStream();

System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

StreamReader readStream = new StreamReader(receiveStream, encode);

string response = readStream.ReadToEnd();

resp.Close();
readStream.Close();
return response;

在ASP方面,我只是验证该请求仅来自本地主机,以防止XSS样式的攻击,然后响应只是Session变量的值。

查找cookie很容易,会话cookie都具有相似的名称,因此只需检查cookie集合,直到找到合适的cookie。请注意,这仅在Cookie在整个域中有效且不仅在我们所在的子文件夹上有效时才有效。

回答

将我们需要共享的数据存储在两个应用程序都可以查询的位置,并使用两个应用程序都知道的密钥。

如果我们不需要Web服务,则可以使用数据库。

回答

在页面上使用经典的ASP表单以通过帖子传递,在子应用中使用request.form取回

回答

为什么不能简单地将其作为加密的查询字符串传递?

子应用可以解密,验证它,而bob是叔叔。