ITPUB??ì3
ITPUB论坛 » WEB 2.0技术 » AJAX在静态HTML页面中实现权限控制的应用

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: [原创] AJAX在静态HTML页面中实现权限控制的应用
离线 Arrayjjake
初级会员



精华贴数 0
个人空间 0
技术积分 28 (43189)
社区积分 0 (1458262)
注册日期 2007-7-4
论坛徽章:0
      
      

发表于 2007-7-4 20:26 
AJAX在静态HTML页面中实现权限控制的应用

最近做了一个铁路局的行车规则发布系统,有点类似于一个新闻发布系统.因为数据量大,为了加快访问的速度,我把里面的规则在后台添加时生成了静态页面保存在硬盘上, 这样每次访问就不必要去数据库取数据了.但是一个问题出现了,就 是这些规则都需要登陆之后才能访问,没登陆是不允许访问的,所以必须在这些静态页面上进行权限的控制,那么在静态页面中怎么判断用户是否登陆了呢......??

        最近刚学了点AJAX,这时就派上用场了,呵呵,AJAX可以异步发送请求到服务器,然后返回一个结果,呵呵,那么这正好是我需要的,解决思路如下:
       在静态页面的模版页中写一段javascript代码,用来发送请求到服务器,在服务器端写一段代码用来检查用户是否登陆,然后返回一个结果给这个html页面,html页面根据返回的结果决定是显示还是转到登陆页面强制用户登陆,到此,问题的解决思路应该明了了,下面来看看实现的代码:

HTML模版页TemplateRules.html代码:
由于模版页比较长,这里只登出AJAX代码部分,即<Body>标签前面的部分

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script type="text/javascript" language="javascript">
    //创建适用用与多种浏览器的XMLHttpRequest对象的函数
    function getXMLRequester( ){   
    var xmlhttp_request = false;   
        try{        
            if( window.ActiveXObject ){            
                for( var i = 5; i; i-- ){               
                 try{                  
                  if( i == 2 ){xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );                       
                   }else{xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );   
                   xmlhttp_request.setRequestHeader("Content-Type","text/xml";xmlhttp_request.setRequestHeader("Content-Type","gb2312";               
                    }
                    break;}               
                     catch(e){   
                           xmlhttp_request = false;              
                             }         
                               }      
                      }else if( window.XMLHttpRequest ){            
                      xmlhttp_request = new XMLHttpRequest();           
                       if (xmlhttp_request.overrideMimeType) {               
                       xmlhttp_request.overrideMimeType('text/xml');            
                       }      
                        }   
                         }
                         catch(e){        
                         xmlhttp_request = false;   
                          }   
                          return xmlhttp_request ;
    }
    function IDRequest() {
    //定义收到服务器的响应后需要执行的JavaScript函数
    url='CheckLogin.aspx'//定义网址参数
    //alert(url);        
    xmlhttp_request=getXMLRequester();//调用创建XMLHttpRequest的函数        
    xmlhttp_request.onreadystatechange = doContents;//调用doContents函数        
    xmlhttp_request.open('POST', url, true);        
    xmlhttp_request.send(null);   
    }   
    function doContents() {        
    if (xmlhttp_request.readyState == 4) {// 收到完整的服务器响应            
        if (xmlhttp_request.status == 200) {//HTTP服务器响应的值OK
        var str = xmlhttp_request.responseText;//将服务器返回的字符串写到页面中ID为message的区域  
        if(str.length>583)
                {
                    //self.location="../login.aspx";
                    location.href='../Login.aspx';
                    
                }         
        } else {               
        alert(http_request.status);            
        }        
        }   
        }
        IDRequest();
        </script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>$Chapter$-->>$Order$-->>$Title$</title>
    <link href="../StyleSheet.css" rel="stylesheet" type="text/css" />
</head>

此处要提一下:上面文件中的以下代码部分是根据服务器端返回结果决定是否强制登陆的关键部分,因为我们是通过xmlhttp_request.responseText;来看返回结果的,而这个返回文本是服务器端页面的html,所以在此处我们通过返回的这个文本长度来判断服务器端返回的是已登陆还是未登陆,如果已登陆则长度肯定小于583,(当然这个长度会因为每个人的做法不同而不同,可根据实际情况来确定一下服务器端的文件HTML的长度),这样就可以进行判断了

var str = xmlhttp_request.responseText;//将服务器返回的字符串写到页面中ID为message的区域  
        if(str.length>583)
                {
                    //self.location="../login.aspx";
                    location.href='../Login.aspx';
                    
                }         
        } else {               
        alert(http_request.status);            
        }        

接下来就是服务器端用来检测是否登陆的页面checklogin.ascx的代码(很简单):
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class CheckLogin : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["UserInfo"] == null || Request.Cookies["UserInfo"].Values["UserName"].ToString() == ""
        {
            Response.Write("111111111111111111111111111111111111111111";//输出不同长度的字符串
        }
        else
            Response.Write("1";
    }
}
就这样,通过上面的HTML模版页生成的规则就可以进行用户权限控制了


更多>>http://blog.csdn.net/j_jake



__________________
我的CSDN专栏:http://blog.csdn.net/j_jake (ASP.NET,AJAX,Windows Mobile,SQL SERVER)
只看该作者    顶部
离线 justforregister
SAP


精华贴数 1
个人空间 10
技术积分 40469 (18)
社区积分 10914 (143)
注册日期 2005-6-10
论坛徽章:80
现任管理团队成员开发板块每日发贴之星生肖徽章2007版:猪开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
      

发表于 2007-7-5 15:12 
权限控制一般不放在页面里


__________________
只看该作者    顶部
离线 chenxl1982
中级会员


精华贴数 0
个人空间 0
技术积分 494 (3934)
社区积分 13 (9481)
注册日期 2007-3-27
论坛徽章:0
      
      

发表于 2007-7-24 21:07 
是的,写在页面上不是等于暴露给别人了,是不安全的,,


__________________
wind
只看该作者    顶部
离线 ShadowKiller
不会跳舞的猪


精华贴数 0
个人空间 0
技术积分 636 (2982)
社区积分 19 (7754)
注册日期 2004-9-17
论坛徽章:2
管理团队成员开发板块每日发贴之星    
      

发表于 2007-7-25 13:27 
牛人啊。 告诉我你们那个网址, 改天我去拜访下。 哈哈

这方法你都想得出来? 你是怕别人不知道规则?


__________________
When you wanna get the most , there's no easy way out; when you ready to go and your heart left in doubt, Don't give up your faith , cause you can win, in this thing called love.Love can conquer all.
只看该作者    顶部
离线 justforregister
SAP


精华贴数 1
个人空间 10
技术积分 40469 (18)
社区积分 10914 (143)
注册日期 2005-6-10
论坛徽章:80
现任管理团队成员开发板块每日发贴之星生肖徽章2007版:猪开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
      

发表于 2007-7-28 23:01 
简直滥用


__________________
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问