如果用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>");
}
}正在回答 回答被采纳积分+1
同学你好,代码中的cookie没有响应给浏览器端,例如:response.addCookie(c);,故没有生效。
实现7天免登录思路参考如下:
第一次访问登录界面并且用户名和密码匹配就获取用户数据保存到Cookie(用户名、密码)里面,或将JSSESSIONID 保存到cookie中,并创建Session对象保存信息到服务端。
注:实际免登陆一般不会将用户名和密码存在Cookie,而是将Uid(唯一表示用户的数据)存在Cookie中,通过Uid找到对应用户将用户名、密码存在Session对象当中。
当再一次访问登录页面的时候判断Cookie或者Session的某个属性是否为空,如果为空则进行登录,否则重定向到首页(登录成功后的界面)。
代码实现方式不唯一,以cookie中保存JSESSIONID为例:关键代码实现参考如下:
登录成功添加数据user到Session,JSSESSIONID存储到cookie中:

首页判断:

祝学习愉快~
- 参与学习 人
- 提交作业 8789 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星