index.jsp:  <head>
     <%
        //当点击“查看我的订单”链接时候会先进入BuCarServlet,然后会判断登录没有,如果没登录,               //isLogin 会有个值“false”,后面的代码里有。       
        //存储在session里的loginuser用来存储当前登录的用户。        String islogin = null;
        UserInfo loginUser = null;
        if(session.getAttribute("isLogin") != null)
        {
         islogin = session.getAttribute("isLogin").toString();
        }        //用户登录之后从session里面判断
        if(session.getAttribute("loginUser") != null)
        {
         loginUser = (UserInfo)session.getAttribute("loginUser");
        }
      %>     <script type="text/javascript">
        var isLogin = <%=islogin%>;
        var loginList = <%=loginUser%>;
        
      function login()
      {
          /*只有在isLogin=="false" 才显示"请您先登录",判断出了该用户没有登录*/
  if(isLogin == false && loginList == null)
  {
    showLogin();
  }
  else
  {
    document.location.href = index.jsp;
  }
      } function showLogin()
      {
      alert('请您先登录!');
      document.location.href="login.jsp";
      }
    </script>
  </head>     <body onload="login()">
       <a href="seeOrderServlet">查看我的订单</a>
       //以下代码省略
     </body>
seeOrderServlet.java的代码:  //就是做个判断,如果没登录 把isLogin的值设置成"false",这是不能跳入到order.jsp,直接跳回主页。 if(session.getAttribute("loginUser") == null)
{
session.setAttribute("isLogin","false");
response.sendRedirect("index.jsp");
return;
}
else
{
response.sendRedirect("order.jsp");
}
登录页面 login.jsp:  <%
   session.setAttribute("isLogin","true");
  %>  <a href="index.jsp">返回首页</a>
  <table>
    //登录的地方省略了...
  </table>
  我想问的是,我在login.jsp里把isLogin的值给设置成true了,为了返回主页的时候不再alert('请您先登录!')。这个时候我点击“返回首页”链接的时候确实不显示"请您先登录!"了,但如果我不点击链接。而直接鼠标右键返回的时候 会一直弹出alert('请您先登录!'),我想问大家这是为什么,我应该怎么解决?

解决方案 »

  1.   

    您好 我的意思是 我跳入login.jsp里面不登陆 然后直接点击 "返回首页" 这个时候总是alert('请您先登录!'); 我不知道这是为什么...
      

  2.   

     我在进入login.jsp的时候已经用session.setAttribute("isLogin","true"); 把isLogin的值改为true了,可是如果现在点击返回首页的话,还是总弹出"请您先登录!",帮我看看哪里写错了
      

  3.   

      /*只有在isLogin=="false" 才显示"请您先登录",判断出了该用户没有登录*/
              if(isLogin == false && loginList == null)下面是否没加“”啊
      

  4.   

    第二次到index.jsp的时候,javascript 代码已近在内存里了,所以你每次点击返回主页面时会跳出对话框
      

  5.   

    不是这个原因,好像在login.jsp里右键点返回以后 我写的session.setAttribute("isLogin","true"); 就没用了似的。
      

  6.   

    如果是这样的话,我直接点击login.jsp里的链接 "返回主页",就不弹出, 我右键返回就给我弹... 无奈...
      

  7.   

    请问if(isLogin == false && loginList == null)这里的loginList哪里来的啊
      

  8.   

    loginList,登录的时候存一个session. 登录成功以后session.setAttribute("loginlist",user);
      

  9.   

    简单看了一下,不知你在做什么,session的值我怎么没有看到呢,其二,islogin应该是boolean吧,为什么要用js呢,普通的页面转换用js有用吗?
      

  10.   

    我试过了,右击返回,就是后退到你数据没有更新的那个页面,那个时候你的isLogin 还是false
      

  11.   

    个人觉得你把isLogin放到cookie里试一试
      

  12.   

    楼主的问题我明白了,就是回退的时候,页面并不向服务器发送请求,导致页面中的SESSION是不读取的,因为JSP是服务端编译的, 而浏览器回退只是客户端的一个浏览器缓存页面而已。
    想要解决这个问题:
    1.在弹出ALERT("你未登陆后"),将标识改成true; 这样后退的时候就不会有再弹出这种事了,但不是很好。
    2。在页面ONLOAD时候用AJAX调后台,重新给ISlOGIN赋值,这样就不会有问题。这种方式最好。
    3。在页面中把ALERT语句放到一个<SPAN>里,不要用弹出对话框,这样,后退什么的不会有影响。暂时没有像到其他方法。
      

  13.   

    当你点击回退按钮的时候直接返回上个历史记录页面,而上个页面是你还没有登录的那个页面,故会弹出alert提示
    解决办法:别在index.jsp上写js代码判断用户是否登陆,主流解决方案应该写个session过滤器去判断session是否存在package filter;   
    import java.io.IOException;   
      
    import javax.servlet.Filter;   
    import javax.servlet.FilterChain;   
    import javax.servlet.FilterConfig;   
    import javax.servlet.ServletException;   
    import javax.servlet.ServletRequest;   
    import javax.servlet.ServletResponse;   
    import javax.servlet.http.HttpServletRequest;   
    import javax.servlet.http.HttpSession;   
      
    //是否登陆进行过滤   
    public class SessionFilter implements Filter {   
        public void init(FilterConfig config) throws ServletException {   
            System.out.println("过滤器初始化!");   
        }   
      
        public void doFilter(ServletRequest request, ServletResponse response,   
                FilterChain chain) throws IOException, ServletException {   
            HttpServletRequest req = (HttpServletRequest) request;   
            HttpSession session = req.getSession();   
            // 如果session不为空,则跳转到其它页面,否则转到登陆页面   
            if (session.getAttribute("loginUser") != null) {   
                chain.doFilter(request, response);   
            } else {   
                request.getRequestDispatcher("login.jsp")   
                        .forward(request, response);   
            }   
        }   
      
        public void destroy() {   
            System.out.println("过滤器销毁!");   
        }   
    }  web.xml配置<?xml version="1.0" encoding="UTF-8"?>   
    <web-app version="2.5"    
        xmlns="http://java.sun.com/xml/ns/javaee"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">      
        <!-- 是否登陆进行过滤 -->   
        <filter>   
            <filter-name>SessionFilter</filter-name>   
            <filter-class>   
                filter.SessionFilter   
            </filter-class>   
        </filter>   
        <filter-mapping>   
            <filter-name>SessionFilter</filter-name>   
            <url-pattern>/*</url-pattern>   
        </filter-mapping>   
      <welcome-file-list>   
        <welcome-file>index.jsp</welcome-file>   
      </welcome-file-list>   
    </web-app>