使用session实现网站N天免登陆()

使用session实现网站N天免登陆(),第1张

使用session实现网站N天免登陆()

问题描述:

一些网站的N天之内免登陆实现方式。


方式一:

首先想到的是使用cookie保存用户登录信息,设置有效期,在用户下次访问时免去登录环节,直接通过cookie获取用户信息


方式二:

方式二:直接将session会话保存,用户下次访问时,继续使用这个session。


相比之下session显得更加安全,但是,大家知道,session会随着浏览器的关闭而消失(确切的说,是在客户端消失,服务器端的session存活周期取决于相应配置),当用户下次启动浏览器,访问网站时,又会得到由网站自动分配的新的session。


那么,问题来了:

如何做到关闭浏览器后到下次登录时session仍然有效?

思路:

  1. 在用户登录成功时,创建session对象,保存用户信息。


  2. 将此session的sessionid保存到cookie中。


  3. 同时将sessionid于session对应关系存储到应用域中,以便后面可以根据sessionid来获取到session。


  4. 在用户关闭浏览器,重新打开浏览器访问网站时,读取用户的cookie,得到sessionid。


  5. 根据sessionid获取到第3步存储到应用域中的session对象。


  6. 从session中读取用户信息。


代码实现:

用户登录Servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到用户post提交的账号
String name = request.getParameter("name");
//得到用户post提交的密码
String pwd = request.getParameter("pwd");
//创建session
HttpSession session=request.getSession();
//往session中储存用户信息
session.setAttribute("name", name);
session.setAttribute("pwd", pwd);
//创建一个cookie用于保存sessionid
Cookie cookie = new Cookie("session", session.getId());
//设置cookie的有效时间
cookie.setMaxAge(Integer.MAX_VALUE);
//将cookie添加到响应行
response.addCookie(cookie);
//此时需要在应用域中添加一个属性,用于储存用户的sessionid和对应的session关系
//以保证后面可以根据sessionid获取到session
getServletContext().setAttribute(session.getId(), session);
//重定向到用户信息页面
response.sendRedirect("user.jsp");
}

用户信息JSP页面:

<%
//获取请求中的所有cookie,得到cookies数组
Cookie[] cookies = request.getCookies();
//如果cookies数组不为null,并且它的长度大于0
if (cookies != null && cookies.length > 0){
//就循环遍历每一条cookie
for (Cookie cookie : cookies) {
//如果cookie的名称为session
if ("session".equals(cookie.getName())) {
//则读取这个cookie的值,得到sessionid
//然后再根据sessionid,获取储存在应用域中的session对象
//强转后,赋值给当前session对象,因为jsp中session对象已经被自动创建,所以这里只需要赋值
session = (HttpSession) application.getAttribute(cookie
.getValue());
}
}
}
%>
<!-- 读取session中的用户配置信息 -->
你好<%=session.getAttribute("name")%>,<%=session.getAttribute("pwd")%>

原文地址:

http://blog.csdn.net/a997208868/article/details/47787305

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/585903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存