在父应用程序和虚拟目录之间传递数据
时间: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是叔叔。