如果用session实现网站7天免登录
如果用session实现网站7天免登录,是不是设置sessionID的生命周期为7天就可以呢?
为什么给JSESSIONID设置生命周期后,浏览器显示有效期仍然是“会话”呢?而且关闭浏览器再打开也获取不到之前session的数据。
package com.imooc.session; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.util.Random; @WebServlet("/session/random") public class RandomServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer random = new Random().nextInt(10000); HttpSession session = request.getSession(); session.setAttribute("random",random); Cookie[] cookies = request.getCookies(); for (Cookie c : cookies){ System.out.println(c.getName() + " : " + c.getValue()); if (c.getName().equals("JSESSIONID")){ c.setMaxAge(60*3); } } response.setContentType("text/html;charset=utf-8"); response.getWriter().println("<h1>随机数"+random+"已生成</h1>"); } }
14
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小小
2022-10-17 14:43:46
同学你好,代码中的cookie没有响应给浏览器端,例如:response.addCookie(c);,故没有生效。
实现7天免登录思路参考如下:
第一次访问登录界面并且用户名和密码匹配就获取用户数据保存到Cookie(用户名、密码)里面,或将JSSESSIONID 保存到cookie中,并创建Session对象保存信息到服务端。
注:实际免登陆一般不会将用户名和密码存在Cookie,而是将Uid(唯一表示用户的数据)存在Cookie中,通过Uid找到对应用户将用户名、密码存在Session对象当中。
当再一次访问登录页面的时候判断Cookie或者Session的某个属性是否为空,如果为空则进行登录,否则重定向到首页(登录成功后的界面)。
代码实现方式不唯一,以cookie中保存JSESSIONID为例:关键代码实现参考如下:
登录成功添加数据user到Session,JSSESSIONID存储到cookie中:
首页判断:
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星