网站因需求,需要实现当用户在浏览页面时,无法使用回退按钮, 首先实现了单点登陆功能, 
但禁用用户使用回退问题还没有解决, 想了一个方法, 请大家指正下, 首先在服务器端给 用户发页面时, 把html格式的页面同时保存下来,存在内存或者硬盘中, 然后会经过一个过滤器,在给用户的页面中附带了一个识别码,在用户的下一次请求时, 会将这个识别码也同时传回来,在经过过滤器时, 如果这个识别码与服务器中的相同, 就认为是最新的请求, 可以放行, 如果不相同, 就可以认为是用户回退后再请求的, 这时就将保存的上次页面再次发给用户. 
现在有两个问题无法解决(是我无法解决), 一是怎样获取这个html格式的页面, 是截获tomcat的 
输出流还是将有其他的什么方法? 二是整个项目已经完成的差不多了,  没有办法去挨个改url, 问下url改写 
能解决附加识别码并在用户再次请求自动添加识别码这个功能吗?? 感到想的是不是太复杂了, 想了半天了,总没有什么好思路.

解决方案 »

  1.   

    http://skill.51xue.cn/computer/javascript/2006-7-12/2006712949159487.shtml
    楼主看看。
      

  2.   

    刚刚查了struts中有token令牌机制, 可以用来防止用户重复提交,  省了很多事。不过对于如何保存用户的最后一个页面, 还没有办法. 
      

  3.   

    http://hi.baidu.com/penify/blog/item/5b233b2936283afd98250a79.html
    试试看
      

  4.   

    是wap版本, 面对手机用户, 不能用js, 只能是纯java.
      

  5.   

    js<script language="JavaScript"> 
    //禁止刷新,回退 
    function onKeyDown() 

    if ( (event.altKey) || ((event.keyCode == 8) && 
    (event.srcElement.type != "text" && 
    event.srcElement.type != "textarea" && 
    event.srcElement.type != "password")) || 
    ((event.ctrlKey) && ((event.keyCode == 78) || (event.keyCode == 82)) ) || 
    (event.keyCode == 116) ) { 
    event.keyCode = 0; 
    event.returnValue = false; 


    document.onkeydown = onKeyDown; 
    function stop(){ //这个是禁用鼠标右键 
    return false; 

    document.oncontextmenu=stop; 
    </script> 
      

  6.   

    token不行么?
    感觉和你描述的差不多
      

  7.   

    token 可以防止用户来后退重复提交, 但是在服务器端判断用户是重复提交后, 
    想把页面定位到他最后的有效页面, 而不是给个警告页面. 所以才要保留个页面. 
      

  8.   


    public Object invoke(MethodInvocation arg0) throws Throwable {
    Object[] args = arg0.getArguments();// action方法的参数
    HttpServletRequest request = (HttpServletRequest) args[2];
    String uri = request.getServletPath();// epg/user.do
    String param = request.getQueryString(); // 参数
    if (CommonsUtil.isExistMethod(checkMethodPrefixs, param))// 存在要检测的方法
    if (!TokenProcessor.getInstance().isTokenValid(request))// 重复提交
    {
    logger.info("检测到重复提交URL: " + uri + "?" + param);
    return new ActionForward(uri + "?m=list");
    } else {// 正常提交
    ActionForward forward = (ActionForward) arg0.proceed();
    if (!Arrays.asList(notCleanTokenForwards).contains(
    forward.getName()))// 执行完Action,且不是转向错误页面,则更换本次操作的Token
    TokenProcessor.getInstance().saveToken(request);
    return forward;
    }
    Object object = arg0.proceed();
    return object;
    }
      

  9.   

    http://hi.baidu.com/penify/blog/item/5b233b2936283afd98250a79.html 
    试试看
      

  10.   


    Ajax 更新页面内容,地址栏永远不变,也就不存在什么后退了。例子去看 dojo 的演示。OVER
      

  11.   

    禁用ie的后退按钮呢,或者后退之后显示网页已过期:看你用什么作为服务器端脚本,客户端可以用window.location.replace(url); 服务器端则清掉cache
    <head>   
      <meta   http-equiv=”pragma”   content=”no-cache”>   
      <meta   http-equiv=”cache-control”   content=”no-cache”>   
      <meta   http-equiv=”expires”   content=”0”>   
     </head>你在不允许返回的那个页面写上:   
      <script>   
      history.go(1);   
      </script>不知道搂主为什么要干预用户的操作。   
      如果为了保密,就每次请求页面时,在服务器端验证身份,不必禁止后退按钮。
     不进行缓存   
      htm网页   
      <meta   http-equiv="pragma"   content="no-cache">   
      <meta   http-equiv="cache-control"   content="no-cache,   must-revalidate">   
      <meta   http-equiv="expires"   content="wed,   26   feb   1997   08:21:57   gmt">   
      或者<meta   http-equiv="expires"   content="0">