0

我有一个 aspx 页面,请参阅:

<%@ Page Language="C#" %>
<%

    HttpContext.Current.Session["UserID"] = "ABC1";
    Response.Write(HttpContext.Current.Session["UserID"].ToString());

%>
<script>
    var parameters = { OpenURL: "test.pdf", java_arguments: "-Xmx256m" };
  var attributes = {archive:"webviewerS.jar,jPDFViewerS.jar", code:"qoppa.webViewer.PDFWebViewer", width:"100%", Height:"95%"};
  var version = "1.6.0";

  deployJava.runApplet(attributes, parameters, version);
</script>

页面加载并创建了一个会话变量,我还添加了一个自定义 httphandler 来处理 pdf 的 http 请求,每个用户输入带有 .pdf 的路径都会运行该类

response.Cookies["UserID"].HttpOnly = false;
if (HttpContext.Current.Session["UserID"] != null)
{

        response.ContentType = "application/pdf";
        response.WriteFile(request.PhysicalPath);

}
else
{
    response.Write("access denied");
}

此脚本的主要测试目标是只能通过使用该 aspx 页面中的 java 小程序来查看 pdf。但最后,

var 参数 = { OpenURL:“ test.pdf ”,java_arguments:“-Xmx256m”};

java小程序请求加载pdf,但似乎无法在httphandler处检测到会话,但是如果我在加载.aspx页面后直接键入.pdf路径,则上面的代码是成功的。

如果applet请求pdf文件,seesion["UserID"]的结果为null,为什么检测不到session值?

4

1 回答 1

0

您是否尝试过使用FiddlerCharles之类的工具来查看从浏览器返回到服务器的小程序请求?

根据服务器配置,通常会调用一个 cookieASP.NET_SessionId或可能调用一个查询字符串参数来维护会话。sessionId

来自ASP.NET 会话状态概述

默认情况下,SessionID 值存储在 cookie 中。但是,您也可以将应用程序配置为将 SessionID 值存储在“无 cookie”会话的 URL 中。

Java 小程序可能不会在请求中包含此内容,因此服务器认为这是一个不同的会话。

于 2013-01-10T01:41:17.377 回答