我有一个在虚拟目录中作为子应用程序运行的应用程序。
我想从父应用程序传递一个值,但我相信 Session 是每个应用程序的键控,并且不起作用。
更复杂的是,父应用程序是 WebForms,而子应用程序是 NVelocity MVC。
有谁知道允许我在虚拟应用程序之间使用某种会话类型功能的技巧?
编辑:网络服务并不是我真正想到的,我需要做的就是将登录的用户用户名传递给子应用程序。此外,如果在父节点上调用 web 服务,我不会得到相同的会话,所以我不知道是什么用户。
听起来像网络服务是要走的路。您可以执行以下操作:
这将解决您可能遇到的任何类型的会话键控或 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 方面,我只是验证请求仅来自 localhost,以防止 XSS 式攻击,然后响应只是 Session 变量的值。
查找 cookie 很容易,会话 cookie 都有相似的名称,所以只需检查 cookie 集合,直到找到合适的 cookie。请注意,这仅在 cookie 在整个域上有效时才有效,而不仅仅是在您所在的子文件夹上。
为什么不能简单地将其作为加密查询字符串传递?
子应用程序可以解密、验证它,并且 bob 是你的叔叔。
在您的页面上使用经典的 asp 表单使用 post 传递,在子应用程序中使用 request.form 获取
将您需要共享的数据存储在两个应用程序都可以查询的地方,并使用两个应用程序都知道的密钥。
如果您不想要 Web 服务,可以使用数据库。