0

我正在尝试%USERPROFILE%使用WScript.Shell. 当我创建一个 vbs 文件并直接从 Windows 运行时,我得到了登录用户的正确路径,但是当我在 IIS 上本地计算机上运行的经典 ASP webapp 中使用它时,C:\Documents and Settings\Administrator它被解析为而不是登录用户C:\Documents and Settings\Default User.

我使用的代码如下

var oShell = new ActiveXObject("Wscript.Shell");
var userPath = oShell.ExpandEnvironmentStrings("%USERPROFILE%");

USERPROFILE从 webapp 检索值时,是否需要检查权限/设置以获取正确值?

PS:我正在使用javascript进行编码。

4

3 回答 3

0

ASP 不知道登录的用户是什么,它运行在一个通用的匿名 Internet 用户帐户下。

如果您希望 IIS 知道当前用户,则必须删除匿名用户对您站点目录的权限。这将强制 IIS 向您的用户显示登录屏幕。
他们登录后,该会话的线程将在登录用户下运行(因此请确保该用户具有权限)。您现在可以使用 request.servervariables("AUTH_USER") 来获取用户名。

埃里克

于 2012-08-28T10:08:02.640 回答
0

选择此站点的 Windows 身份验证(IIS 配置)而不是匿名这种安全性在 IIS 中称为 NTLM,并且使用文件夹和文件的标准 NTFS 权限授予权限,当使用 IE 作为浏览器时没有提示登录(单点登录),如果您使用 FF,则每个会话必须登录一次。这是一个 ASP 页面,它显示了服务器端可用的所有变量。如果需要,您可以将这些变量传递给您的客户端代码,最好不要使用 ActiveX 进行身份验证(并且在大多数情况下)。

'file servervaraibles.asp
<html>
<%@language=VBScript%>
<%
  With Response
    .Expires=-1
    .Clear
  End With
  dim teller
  response.write "<h1>Servervariables</h1>"
  response.write "<table>"
  teller = 1
  for each subkey in Request.Servervariables
    response.write "<tr><td>"
    response.write teller
    response.write "</td><td>"
    response.write (Request.Servervariables.Key(teller))
    response.write "</td><td>"
    response.write (Request.Servervariables.Item(teller))
    response.write "</td></tr>"
    teller = teller + 1 
  next
  response.write "</table>"
  response.write request.servervariables("path_translated") & "<br>"
  response.write "USER cookie:" & Request.Cookies("USER") & "<br>"
  response.write "USER Sessionvariable:" & Session("USER") & "<br>"
%>
</html>
于 2012-08-28T10:20:30.453 回答
0

我认为您要问的问题的答案是:不。

ASP 不能按需加载和卸载用户配置文件,甚至可以假设服务器对每个用户都有一个配置文件(每个用户必须至少以交互方式登录到服务器一次)。

您可以做的最好的事情是关闭应用程序的匿名访问,以便服务器变量“AUTH_USER”包含该用户唯一的用户名。为可能出现在 AUTH_USER 中的每个域创建一个公共网络共享(您可能只有一个)。在该网络下为每个用户创建一个共享文件夹并授予适当的访问权限。

现在您可以解析 AUTH_USER 并确定可以为当前请求用户加载和保存文件的根路径。

于 2012-08-28T14:59:12.990 回答