代码之家  ›  专栏  ›  技术社区  ›  Robb

如何让JavaScript知道HTTP会话(用户登录)已经启动?

  •  0
  • Robb  · 技术社区  · 3 年前

    我正在制作一个电子商务网站,我很难识别一个用户是主动登录的,这样就可以直接在该用户下进行购物车购买。

    在Eclipse IDE中使用Java,“HttpSession session=request.getSession();”是会话的启动方式。我不知道如何确认它实际上已经启动了。我尝试过用JavaScript获取会话属性的函数(如果会话已经启动),如果成功,登录按钮应该改为注销,但每次运行都没有区别。我试图从会话属性中提取登录电子邮件,这样我就可以用JavaScript进行购买并将其发送回Java Servlet。

    Java Servlet:
    
    //begin session
    HttpSession session = request.getSession();
    
    //session storage attributes
    session.setAttribute("loggedInUser", true);
    session.setAttribute("user", email);
    session.setAttribute("price", price);
    session.setAttribute("points", points);
    session.setAttribute("item", item);
    
    JavaScript:
    
    //If user is logged in 
    function checkLoggedIn()
    {
    if (sessionStorage.getItem('loggedInUser') === 'true') 
    {
          // User is logged in, change sign-in link to log-out link
          document.getElementById('signin-link').textContent = 'Log Out';
    }
    else
    {
          document.getElementById('signin-link').textContent = 'Sign In';
    }
    
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   John Williams    3 年前

    您确实应该使用Thymelaf或JSP之类的东西来简化这一过程。

    使用纯Servlet是可能的,如下所示:

    在Java中修改登录调用的servlet响应以返回一个值,该值指示会话是否正确登录。类似于以下内容:

    在此调用中使用200表示成功登录,使用400表示失败。

    response.setStatus(400); // for failure
    

    使用此响应填充会话存储:

    sessionStorage.setItem('loggedInUser', 'true')
    

    要使用Servlet/JSP实现这一点,请按原样使用Servlet>如下所示:

    sessionStorage.setItem('loggedInUser', '<%=session.getAttribute(“loggedInUser”)%>')