我有基本的登录 - 注销会话管理问题。 当我点击登录按钮,下面的这个功能被触发。在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中 得到
高于白线:登录,注销行动(请注意,我已经给会话无效输出)
低于白线:直接去的index.html,它重定向到login.html的,和你登陆您的有效凭证,
现在这是我的问题,它使会话无效,但它仍然说会话已经存在。更令人困惑的是,会话是存在的,但值为空。
我该如何解决这个问题?请帮助
PS:除了我提供了LogButton.java的片段是不显著对于这个问题
谢谢苏雷什的原因吧!除了你的回答,我似乎在做index.html中的错误类型的变量检查,而不是在'错误'中给出ajax的空值,我在'成功'中检查它是否就像一个字符串! 干杯 –