我必须开发一个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);
}
Home.jsp访问session.getAttribute()
out.println("<h1 align=center>Welcome "+session.getAttribute("username")+"</h1>");
答案 0 :(得分:0)
您可以将此代码用于创建会话。
CreateSession(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
session.setAttribute("useremail", user_useremail);
}
答案 1 :(得分:0)
正如您所注意到的,重新启动计算机后,session
将被删除。这是由于session
属性的临时性质。它存储在内存中,因此当您重新启动计算机时,它将被删除。
此处的解决方案是使用cookies
。 Cookies
是存储在客户端计算机上的小块数据,随客户端发出的每个请求一起发送。
因此,当用户请求页面时,您可以检查他是否有cookie
,如果他有,则可以从cookie中读取数据并在没有再次输入凭据的情况下签到他。
使用servlet设置cookie涉及三个步骤:
(1)创建Cookie对象:使用cookie名称和cookie值调用Cookie构造函数,两者都是字符串。
Cookie cookie = new Cookie("key","value");
请注意,名称和值都不应包含空格或以下任何字符:[]()=,“/?@:;
(2)设置最大年龄:使用setMaxAge
指定cookie应该有效的时间长度(以秒为单位)。以下将设置一个24小时的cookie。
cookie.setMaxAge(60*60*24);
(3)将Cookie发送到HTTP响应标头:您使用response.addCookie
在HTTP响应标头中添加Cookie,如下所示:
response.addCookie(cookie);
在收到回复时,将cookie存储在客户端的计算机上。
您可以在https://www.tutorialspoint.com/servlets/servlets-cookies-handling.htm
阅读更详细的Cookie教程最佳, 约万。