gpt4 book ai didi

java - session 在失效后仍然存在

转载 作者:行者123 更新时间:2023-11-30 06:52:06 24 4
gpt4 key购买 nike

我有基本的登录-注销 session 管理问题。当我点击登录按钮时,下面的这个函数会被触发。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");
}
}
});
}

检查 session 是否是新的后,我在 LogButton.java 中创建 session

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");
}

我从成功登录后创建的 session 中获取他们的名字

我执行了一些操作并注销,

$('#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,如果为 true,我将继续使 session 无效并删除属性

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时是否设置了 session ,

$(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"));
}

这也可以正常工作,即如果未创建 session ,它会将我重定向到 Login.html。

现在的问题是,即使在提供有效凭据后,我也无法登录,不知何故“关联”属性设置为 null,

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

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

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

现在这是我的问题,它使 session 无效,但它仍然说 session 已经存在。更让人困惑的是,session是存在的,但是value却是null。

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

P.S:除了我为 LogButton.java 提供的代码片段之外,对于此问题并不重要

最佳答案

 HttpSession session=req.getSession();

如果您查看 getSession 的文档方法

Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session. If create is false and the request has no valid HttpSession, this method returns null.

您正在调用 req.getSession() 方法,该方法为您提供一个新 session 。可能要获取现有 session ,您需要使用

HttpSession session=req.getSession(false);

由于您已经使 session 无效,因此 session 将为 null

您的其他问题

Now this is my problem, It invalidates the session, yet still it says session is already existing . Even more confusing is, session is existing, but the value is null.

这是因为您创建了一个新 session ,其中没有属性,这就是您得到 null 的原因

关于java - session 在失效后仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42548088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com