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