Java 即使在使会话无效后仍存在会话

Java 即使在使会话无效后仍存在会话,java,session,login,Java,Session,Login,我有基本的登录注销会话管理问题。 当我单击login按钮时,下面的函数会被触发。在LDAP身份验证之后,它会移动到index.html,在那里我会显示它们的名称 function validate() { var pageTitle=$(document).attr('title'); var un=document.getElementById('username').value;

我有基本的登录注销会话管理问题。 当我单击login按钮时,下面的函数会被触发。在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中,我检查按钮是否为VikalLogoutButton,如果为true,我将继续使会话无效并删除属性

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"));
}
这也可以很好地工作,也就是说,如果没有创建会话,它会将我重定向到Login.html

现在的问题是,我无法登录,即使在提供了有效凭据之后,“Associate”属性也被设置为null

下面是我在cmd中得到的System.out.println输出

白线上方:登录、注销操作(注意我给出的会话无效输出)

白线下方:直接转到index.html,它会重定向到Login.html,您可以使用有效凭证登录

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

我如何克服这个问题?请帮忙

注意:除了我为LogButton.java提供的代码片段之外,其他代码片段对于这个问题没有什么意义

 HttpSession session=req.getSession();
如果你看一下方法的文档

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

您正在调用
req.getSession()
方法,该方法将为您提供一个新会话。可能是为了获得您需要使用的现有会话

HttpSession session=req.getSession(false);
由于您已经使会话无效,这会将会话设置为
null

你的另一个问题

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


这是因为您创建了一个新会话,其中没有任何属性,这就是您得到
null

谢谢suresh!除了你的答案,我似乎在index.html中做了错误类型的变量检查,而不是在ajax的“error”中给出null,而是像在“success”中的字符串一样检查它!干杯