jsp中的会话似乎无法正常工作

jsp中的会话似乎无法正常工作,jsp,session,Jsp,Session,我必须开发一个web应用程序,其中登录页面中用户输入的值被多个jsp页面使用。因此我使用了会话。当我注册为用户并再次登录时,它可以正常工作。但是一旦我重新启动计算机,它在session.getAttribute()中显示空值。可能有什么问题 下面是login.jsp中的代码 try{ Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:330

我必须开发一个web应用程序,其中登录页面中用户输入的值被多个jsp页面使用。因此我使用了会话。当我注册为用户并再次登录时,它可以正常工作。但是一旦我重新启动计算机,它在session.getAttribute()中显示空值。可能有什么问题

下面是login.jsp中的代码

try{
    Class.forName("com.mysql.jdbc.Driver");
    con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/vaishnavi","root","atreyasa");

    name=request.getParameter("username");
    password=request.getParameter("password");

    st=con.createStatement();
    st1=con.createStatement();

    rs=st.executeQuery("select * from admins where username='"+name+"' and password='"+password+"'");
    rs1=st1.executeQuery("select * from admins where username='"+name+"' and password!='"+password+"'");

    if(rs!=null&&rs.next()){
        session.setAttribute("username",name);
        response.sendRedirect("http://127.0.0.1:8080/Project_programs/home.jsp");
    }
    else if(rs1!=null&&rs.next()){
        out.println("Enter correct password");
    }
    else{
    response.sendRedirect("http://127.0.0.1:8080/Project_programs/register.jsp");
    }
}
catch(Exception e){
    out.println(e);
}
访问session.getAttribute()的Home.jsp

out.println(“欢迎”+session.getAttribute(“用户名”)+”;

您可以将此代码用于创建会话

 CreateSession(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession();
    session.setAttribute("useremail", user_useremail);
  }

正如您所注意到的,重新启动计算机后,
会话
将被擦除。这是由于
会话
属性的临时性质造成的。它存储在内存中,因此当您重新启动计算机时,它会被擦除

这里的解决方案是使用
cookies
<代码>Cookies是存储在客户端计算机上的小块数据,随客户端的每个请求一起发送。 因此,当用户请求页面时,您可以检查他是否有
cookie
,如果他有,则您可以从cookie中读取数据并登录,而无需他再次输入凭据

使用servlet设置cookies包括三个步骤:

(1) 创建Cookie对象:使用Cookie名称和Cookie值调用Cookie构造函数,两者都是字符串

Cookie cookie = new Cookie("key","value");
请记住,名称和值都不应包含空格或以下任何字符:[]()=,“/?@;”

(2) 设置最大年龄:使用
setMaxAge
指定cookie的有效时间(以秒为单位)。下面将设置一个cookie 24小时

cookie.setMaxAge(60*60*24);
(3) 将Cookie发送到HTTP响应头:您可以使用
response.addCookie
在HTTP响应头中添加Cookie,如下所示:

response.addCookie(cookie);
当客户收到响应时,将cookie存储在客户机的计算机上

您可以在以下位置阅读有关Cookie的更详细教程:

最好的,
Jovan。

但是会话是一个隐式对象,对吗?需要再次创建它吗?好吧,但是将为新的jsp请求rignt再次创建会话?我将在session.setAttribute()中再次设置这些值..我仍然无法访问。另外,我刚刚注意到这是重新启动后的第一次登录尝试…一旦我注销并再次登录,它就会正常工作。没错,客户端发送的请求中包含一个会话。如果我做对了,你重新启动机器,尝试访问页面,它会要求你登录凭据?然后,当你u提供(即登录)后,它将从此处平稳运行?如果是这样,这是完全正常的,因为正如我在上面的回复中提到的,会话是非永久性的,并且在重新启动计算机时会被删除。一旦我提供登录凭据,它将在重新启动后第一次显示会话值null(或关闭并打开浏览器)如果我在那之后再次登录,问题是你正在jsp页面上执行所有这些业务逻辑操作!你必须在servlet中执行这些操作,然后根据cookie的存在重定向到jsp页面。如果你不想这样做,那么只需在所有操作之上放一个if语句,检查请求是否有会话。比如这是:“试试{只需添加and if语句,检查jsp文件顶部是否有会话。这就是我所能帮助的。如果你能投票支持我的答案,这对我来说意义重大。”。
response.addCookie(cookie);