gpt4 book ai didi

java - 允许每个用户有一个 session

转载 作者:行者123 更新时间:2023-12-01 22:06:24 24 4
gpt4 key购买 nike

我正在开发的 Web 应用程序在 Tomcat 服务器上运行 JSP 和 JAVA。如何才能只允许每个用户一次只有一个 session ,这意味着不允许任何用户从同一台或其他计算机/浏览器登录多个 session 。

JSP 客户端:

<input type="text" name="uname" placeholder="Username"> <br>
<input type="password" name="pwd" placeholder="Password"> <br>


<input type="submit" value="Login">
<% String fail = request.getParameter("loginFailed");


if(fail != null && fail.equals("yes"))
{
out.println("<br><font color=\"red\"> Login failed</font>");
}
else if(request.getParameter("loggedOut") != null)
{
out.println("<br><font color=\"red\">You have been logged out.</font>");
}

%>

JAVA部分:

public class login extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public login() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

String[] uname = request.getParameterValues("uname");
String[] pass = request.getParameterValues("pwd");

if( uname.length == 0 || pass.length == 0)
{
response.sendRedirect("/MASC/index.jsp?loginFailed=yes");
return;
}

UsersDB authdb = new UsersDB();
User authUser = null;
try {
authUser = authdb.auth(uname[0], pass[0]);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

if(authUser == null)
{
response.getWriter().append("not authenitacted");
Cookie authCookie = new Cookie("auth", "no");

response.addCookie(authCookie);
response.sendRedirect("/MASC/index.jsp?loginFailed=yes");
}
else
{
System.out.println("auth session " + authUser);
HttpSession session = request.getSession();
session.setAttribute("uid", authUser.getUid());
session.setAttribute("level", authUser.getLevel());
session.setAttribute("aeid", authUser.getAeid());

session.setMaxInactiveInterval(15*60);

response.sendRedirect("/MASC/welcome.jsp");
}


}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

有没有办法存储登录的用户,或者在数据库“Loggedin”中创建一个新列并在允许用户登录之前检查该列?或者有没有更有效的方法来实现?

最佳答案

首先,您需要定义当用户使用不同的 session 登录时会发生什么。请记住,如果用户关闭浏览器,您的服务器不会收到通知,因此甚至可以通过重新启动同一浏览器来创建新 session 。

鉴于此,我认为唯一有意义的方法是当用户再次登录时使用户的现有 session 无效。

为此,您应该创建一个应用程序范围的属性(在 ServletContext 上),其中包含用户到 Activity session 的映射。登录时,您将替换当前条目(如果有)。对于所有其他访问,如果当前 session 不是 Activity session ,则重定向到登录页面。

关于java - 允许每个用户有一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701587/

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