看了很多教材,里面介绍服务器端脚本和客户端脚本的区别的时候,只是简单的说明了下:客户端脚本解释和运行在客户端机器,服务端脚本解释运行在服务器,如果添加了runat=server字段,那么同样是解释和运行在服务器,但这其中还是有本质区别的,对吧?
举个例子:<script language="javascript" runat="server">
var fs=new ActiveXObject("Scripting.FileSystemObject"); 
var file=fs.CreateTextFile("e://test.txt",true); 
file.WriteLine("hello"); 
file.Close();
</script>以上代码加了runat=server 但是建立文件还是在客户端,而不是在服务器上啊,这种情况该怎么理解呢?如果正确理解runat=server这句话的意思?

解决方案 »

  1.   

    runat=server,只有asp.net自带的标签(以<asp:开头)或者asp.net自定义标签才被认为是有效的(服务器端执行)。
      

  2.   

    javascript代码,只要是写在网页上的,绝对是在客户端。所以你的FSO肯定是在客户端上建立文件
      

  3.   


    不懂装懂<script language="Jscript" runat="server">
    Response.Write("aaa");
    </script>你自己做过了再说话
      

  4.   

    Scripting.FileSystemObject
    看看你组件的名字吧,服务端不叫这个
      

  5.   

    兄弟没用过globle.asa吗?没用过的话,找个例子,看一下代码再说话。呵呵。
      

  6.   


    兄弟的玩笑开大了,呵呵。你应该听说过也有些人喜欢用javascript写服务端代码吧。。
      

  7.   

    呵呵呵,我也经常在服务端开脚本引擎,直接用脚本代替   java类,超级方便
      

  8.   

    终于有回复了。我昨天还看了些其他资料,这么说来javascript 只要添加了runat=server 是完全可以当作服务器端的脚本来运行的,执行操作数据库或者用FSO建立文件之类的功能也是完全可行的,是不是这样呢?而我用那段代码之所以没有在服务器建立文件好像是我代码没写对?
    我昨天测试的内容是:
    同样的代码 加了runat可以在客户端E盘建立文件,如果不加runat,在客户端E盘都不能建立文件
    同样的代码,如果把页面扩展名改成.jpg,那么无论如何在客户端都不能建立文件,这应该是出于安全问题吧?因为我问这个问题,本身就是由于学习asp上传木马漏洞引过来的。
      

  9.   

    14楼:
    我的意思是:
    1、把你顶楼的代码保存为test.htm
    2、测试的时候,你可以:
      1)将test.htm放在客户端机器随便一个目录,用浏览器打开进行测试;
      2) 将test.htm放在服务器上,由客户端浏览器来打开这个网页进行测试;
    3、删去runat="server"重复步骤1-2;
    4、比较四种方式下的结果P.S. 1-2楼rainsilence兄弟的说法是错的,别受误导
      

  10.   

    我试过了,无论是否添加runat=server,在本机都会弹出安全警告,如果允许就建立文件了,在服务器的话,则都不会建立文件啊
      

  11.   


    我承认说法是有点问题。其实最好的方法是打开页面后看源文件。所有在源文件中出现的代码都是在客户端执行的。所以,你可以加上runat=server看看效果。如果在客户端你看到<script runat=server这类的代码,就说明runat=server失效了。