2017-03-02 95 views
1

我有基本的登录 - 注销会话管理问题。 当我点击登录按钮,下面的这个功能被触发。在LDAP认证后,它移动到index.html我显示他们的名字。会话即使失效后仍存在

function validate() 
      { 
       var pageTitle=$(document).attr('title'); 
       var un=document.getElementById('username').value; 
       var pwd=document.getElementById('pass').value; 
       $.ajax({ 
        'url':'/analytics_1/validate', 
        'data':'userName='+un+'&password='+pwd, 
        'type':'GET', 
        'success':function(response) 
        { 
         if(response==1) 
         { 
          $.ajax({ 
           'url':'/analytics_1/LogButton', 
           'type':'POST', 
           'data':'userName='+un+'&buttonId=VIKALPLoginButton&pageTitle='+pageTitle, 
           'success':function() 
           { 
            window.open("index.html","_self"); 
           } 
           }); 

         } 
         else 
         { 
          alert("Invalid Credentials"); 
         } 
        } 
       }); 
      } 

我检查后创建LogButton.java会话,如果它是新

if(session.isNew()) 
      { 
       System.out.println("session is not set, lets create the name"); 
       associate=req.getParameter("userName"); 
       session.setAttribute("Associate",associate); 
      } 
      else 
      { 
       System.out.println("session is already set, lets get the name"); 
       associate=(String)session.getAttribute("Associate"); 
      } 

我从我成功登录

后创建的会话中获取他们的名字和我做一些动作和注销,

$('#logout').on('click',function() 
     { 
      var pageTitle=$(document).attr('title'); 
      $.ajax({ 
        'url':'/analytics_1/LogButton', 
        'data':'buttonId=VIKALPLogoutButton&pageTitle='+pageTitle, 
        'type':'POST', 
        'success':function() 
        { 
         window.open('Login.html',"_self"); 
        }, 
        'error':function(err) 
        { 
         alert("haha:"+err.response); 
        } 
      }); 
     }); 

在LogButton.java中,我检查按钮是否是VIKALPLogoutButton,如果属实,我继续使会话无效并删除属性

if(button.equals("VIKALPLogoutButton")) 
      { 
       System.out.println("deleting the session cuz of logout"); 
       session.removeAttribute("Associate"); 
       session.invalidate(); 
       //System.out.println("what happens to the session? " +session.isNew()); 
      } 

所有这些都按照要求发生。现在出现安全用例:如果我在没有登录的情况下访问index.html会发生什么?

于是我开始检查,如果会话设置与否时的index.html负荷,

$(document).ready(function() { 
$.ajax({ 
       'url':'/analytics_1/GetAssocId', 
       'type':'POST', 
       'success':function(response) 
       { 
        if(response!="null") 
         {} 
        else 
        { 
         window.open("Login.html","_self"); 
        } 
        $('#name').text(response); 
       } 
      }); 
..... 
..... 
} 

GetAssocId.java:

public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException 
{ 
    HttpSession session=req.getSession(); 
    PrintWriter out=res.getWriter(); 
    out.print(session.getAttribute("Associate")); 
} 

这也能正常工作,即它重定向我登录。 html如果会话未被创建。

现在的问题是,我无法登录,甚至提供有效凭据后,莫名其妙的“关联”属性被设置为null,

下面是的System.out.println输出,我在cmd中 enter image description here得到

高于白线:登录,注销行动(请注意,我已经给会话无效输出)

低于白线:直接去的index.html,它重定向到login.html的,和你登陆您的有效凭证,

现在这是我的问题,它使会话无效,但它仍然说会话已经存在。更令人困惑的是,会话是存在的,但值为空。

我该如何解决这个问题?请帮助

PS:除了我提供了LogButton.java的片段是不显著对于这个问题

回答

1
HttpSession session=req.getSession(); 

如果你看一下getSession方法的文档

返回与此请求关联的当前HttpSession,或者,如果没有当前会话且create为true,则返回新会话。 如果create为false并且请求没有有效的HttpSession,则此方法返回null。

您打电话给req.getSession()方法给你一个新的会议。也许让现有会话,您需要使用

HttpSession session=req.getSession(false); 

正如你已经失效了会议,这给你会话null

您的其他问题

现在,这是我的问题,这使会话失效,但仍它说会议已经存在。更令人困惑的是,会话是存在的,但值为空。

这是因为你创建了一个新的会话,也有它没有属性,这是你得到null

+0

谢谢苏雷什的原因吧!除了你的回答,我似乎在做index.html中的错误类型的变量检查,而不是在'错误'中给出ajax的空值,我在'成功'中检查它是否就像一个字符串! 干杯 –

相关问题