楼主是想给链接加个校验码用来确认点击的有效性?由于你的“指定的值”是要后台校验的,也就是说前台页面生成的时候,这个值必须也同时生成到页面上,所以保存在什么位置都无所谓了,有心人肯定能找出来,因此,与其监听点击事件再附加参数还不如直接就写在生成的URL上…… 你只要确保校验值的唯一性和时效性就没什么问题了。

解决方案 »

  1.   

    你的超链接是怎么读出来的?
    把超链接统一指向一个页面如:redirect.aspx?url=http://www.sina.com.cn
    在redirect.aspx里获取url
      

  2.   

    …… 
    直接写出来,再让人点击和让人先点击再附加到链接上有区别吗?……楼主非要这么隐蔽的话,可以在生成DataList时给每个链接都绑定onclick事件(如):
    <a onclick="setUrl(this)" href="xxx.aspx">xxx</a>
    <script language=JavaScript>
    function setUrl(elm)
    {
       elm.href += "?id=123";
    }
    </script>判断一下“xxx.aspx”、“xxx.aspx?”、“xxx.aspx?type=1”、“xxx.aspx?type=1&”之类的情况完成附加参数就是了
      

  3.   

    如果是后台实现,在用户已登陆的状态下~ 不用附加用户ID也能记录是谁访问了页面;
    (非要附加的话,你的DataList不也是后台生成的么,生成链接时把用户ID也加上就是了[不要说你无法获取用户ID])如果是只有前台实现(身份信息在cookie里),就只能在前台附加。不过有完全基于前台的身份验证系统么?
      

  4.   

    1、每次访问都记录一次并不会给数据库带来多大的压力~ 不过就是多一次存储而已,可比你读取商品类别、数据等要简单的多,九牛一毛都不到。(站点计数器都得每页记录访问)
    反正你都要读取数据库判断是否已经访问过当前页,只要判断是否是在一段时间内的首次访问就是了,记不记录重复访问就看你的记录规则了。(有效间隔时间~ 你可以以一天算)
    ----------------------------------------------------
    A. 数据库链接池的上限是7,如果同时有20万人在访问,你敢保证连接池100%不会达到上限?
    B. 如果每天都会新增200万条新数据,那么想想吧,我们该投入多少硬件来保存怎么庞大的数据量?
    我现在考虑的不是服务器内存的问题,我考虑的是I/O管道是否被占满,以及数据量庞大查询和管理起来不方便。2、凡有用户系统的网站,在页面载入时,总要先检查一下用户登录状态吧……这不就是知道是谁正在访问这个页面了么……   -_-b
    ----------------------------------------------------
    我只知道谁在访问这个网站,不能知道谁在访问这个页面。
    因为一个页面有无数种显示,
    ProductList.aspx?Id=1
    ProductList.aspx?Id=2
    ProductList.aspx?Id=3
    ....
    等等
    你只知道用户在看ProductList.aspx,但不知道他在看那一个ID,请问你应不应该记录一下呢?
      

  5.   

    1、
    A:如果真的能达到上限,那就该恭喜你了,你可以升级硬件系统了。(这么大的访问量就不必死守着原来的配置,效益也该早就有了)
    B:我说的每次访问都记录并不意味着每次访问都会增加一条记录,比如:
    可以把访问记录设计成:
       Id            url                count       userId        day
        1    ProductList.aspx?Id=21       1          001      2007-03-13
        2    ProductList.aspx?Id=8        3          001      2007-03-13
    这样就可以记录,每个页面都增加一个访问计数就可以记录所有的访问;
    当然你也可以不要这个计数字段,只要检查库中是否已存在该页面的记录就行了,有就可以不记录了。
    (ps:每次访问都记录可不是我说的,我不过顺着你的说法评论一下而已,而且每次访问页面都获取用户ID和每次访问都记录是两回事,你即使是用url传值不也同样要检查是否已经记录过了么,所以就算每次都记录也不过是多一次数据更新而已,你还可以把记录操作都封装在一个存储过程里面,这样一次更新操作就几乎可以忽略)如果你要提高数据库效率,应该尽量减少数据库和网站后台程序的交互,把数据库操作(包括一些固定的逻辑规则)都写到存储过程里,再花点时间做做优化。2、当你获取页面请求的URL时,取得的是完整的url,包括参数部分……当然,如果你只需要用某个Id来区别的话,那就获取相应的参数就是,这个和你原先设想的获取URL里的用户ID不是一回事么~(就等于我所说的直接写在url上)……
    当然,现在用户ID就不必写在上面了,因为可以在后台直接获取而不必用url传递。
      

  6.   

    1
    A:RMB啊~~~都是吝啬鬼~ 在赚钱也不肯换硬件。
    B:你这样做成一张表又要占用服务器资源了,这肯定是不可取的。记录用户ID那肯定是要记录的。2
    如果你不获取用户ID,而直接获取Url的参数,我还是搞不明白你是如何理解成是一回事。
    就好像每天都有很多人坐车到我的公司来买东西,而我不记录这个用户的联系方式,而直接记录汽车的型号,我是如何知道谁乘坐那辆汽车呢?
      

  7.   

    哪管那么复杂?本质上不就是打算某个链接被点击的时候能够对发送的URL做改动嘛。楼主参考下面的方式就是了。function SetAhref(Item)
    {
    Item.href += "?param=" + "ParamValue";
    }
    <td>
     <div align="center"><a href="www.abc.com/index.htm" onClick="SetAhref(this)">链接文字</a></div>
    </td>
      

  8.   

    …… 
    做访问记录还能不用独立表的 -_-b
    如果你觉得记录URL太占空间,只记录特殊的ID即可(能满足需求就行)
    这不是你原先设定的“说明该页面被访问过一次”么,不过要都能用Id来确定那就记Id吧……至于获取Url的参数,我也是顺着你前面的需求嘛,“就传一个值加到该超链接的Url的后面”这个到后台不就得同样“获取Url的参数”么;
    用户Id是肯定要获取的,可以在后台直接获取(类似登录验证)
    页面特定的Id信息也是要获取的,直接获取Url的参数
    如果用户Id是附加在Url上面的,那么也要以“获取Url的参数”的方式来获取(这应该是你最先想要的吧)
    这就要看楼主的后台是否可以知道“现在正在请求(访问)这个页面的人是谁(Id)?”,还是只能反馈“现在正在请求的URL上包含的用户Id是否在用户库里?”;
    前者就是说可以在后台获取当前登录用户的Id,而后者则是后台没有登录状态记录只能校验传来的Id是否合法;
    所以前者就可有用作用户访问记录,而后只能用来“查询用户是否存在”可用于“推荐人系统”之类的……
      

  9.   

    不知道我看明白你的意思没有,你的要求貌似是这样的,你另存下面代码试试,看合你要求不?1、像上面有人说的,一开始在链接标签里加个onclick事件,用于你加参数处理
      缺点:如果页面多,链接多。要一个个添加,麻烦
    2、可以遍历你指定DataList里的连接,在onclick事件上加上你的函数9attachEvent)
    3、如下代码,跟第2条有些类似,这个只是遍历少点<script>
    document.onclick = function(){
    var objParent = document.getElementById("tabTest");
        var obj = window.event.srcElement ; if(obj && obj.tagName.toUpperCase()=="A"){
     for(var i = 0; i < objParent.all.length; i++){
    if(objParent.all(i)==obj){
    if(obj.href.indexOf("?")<0)
    obj.href+="?"
    else
    obj.href+="&"

    obj.href+="p=冷风工作室"
    }
     }
    } return true;
    }
    </script><body>
    这里有dkdkdlsldldld<a href="http://www.google.com/search?q=net205">测试链接</a>
    <table width="100%" border="0" id="tabTest" name="tabTest">
      <tr>
        <th width="15%" height="25">序号</th>
        <th width="47%">标题</th>
        <th width="19%">作者</th>
        <th width="19%">时间</th>
      </tr>
      <tr>
        <td align="center">1</td>
        <td><a href="http://community.csdn.net/index.aspx?tt=332">11111</a></td>
        <td align="center">aaaaa</td>
        <td align="center">2007-3-14</td>
      </tr>
      <tr>
        <td align="center">2</td>
        <td><a href="abc.asp">22222</a></td>
        <td align="center">addsd</td>
        <td align="center">2007-3-14</td>
      </tr>
      <tr>
        <td align="center">3</td>
        <td><a href="http://news.163.com/07/0314/03/39H17I7J000127FP.html">3333333</a></td>
        <td align="center">ddddd</td>
        <td align="center">2007-3-14</td>
      </tr>
      <tr>
        <td align="center">4</td>
        <td><a>4444</a></td>
        <td align="center">sssss</td>
        <td align="center">2007-3-14</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td><a href="abc.asp">55555</a></td>
        <td align="center">sssss</td>
        <td align="center">2007-3-14</td>
      </tr>
    </table><table width="100%" border="0" id="tabTest2" name="tabTest2">
      <tr>
        <td><a href="http://news.163.com/07/0314/03/39H17I7J000127FP.html">另一个测试实例</a></td>
      </tr>
    </table><p>dsdadasdsd</p>
    </body>
      

  10.   

    用Session保存当前页面的Url,每次加载页面判断当前Url是否等于上一次的Url,如果相等就是重复访问了同一超链接,否则就不是。如果是重复访问,就不操作数据库,反之亦然。