• cookie


    它可以在浏览器中保存一些信息,并且在下次请求时,请求头中会携带这些信息。

    建立cookie

    1. Cookie cookie = new Cookie("test", "yyds");
    2. resp.addCookie(cookie);

    查询cookie

    1. for (Cookie cookie : req.getCookies()) {
    2. System.out.println(cookie.getName() + ": " + cookie.getValue());
    3. }

    在`HttpServletResponse`中添加Cookie之后,浏览器的响应头中会包含一个`Set-Cookie`属性,同时,在重定向之后,我们的请求头中,会携带此Cookie作为一个属性,同时,我们可以直接通过`HttpServletRequest`来快速获取有哪些Cookie信息

    * name   -   Cookie的名称,Cookie一旦创建,名称便不可更改

    * value  -   Cookie的值,如果值为Unicode字符,需要为字符编码。如果为二进制数据,则需要使用BASE64编码

    * maxAge  -  Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为-1。

    * secure  -  该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。

    * path  -  Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。

    * domain  -  可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。

    * comment  -  该Cookie的用处说明,浏览器显示Cookie信息的时候显示该说明。

    * version  -  Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范

    最关键的其实是`name`、`value`、`maxAge`、`domain`属性

    使用Cookie来实现记住我功能

    我们可以将用户名和密码全部保存在Cookie中,如果访问我们的首页时携带了这些Cookie,那么我们就可以直接为用户进行登陆,如果登陆成功则直接跳转到首页,如果登陆失败,则清理浏览器中的Cookie。

    先在前端页面的表单中添加一个勾选框

    1. <div>
    2. <label>
    3. <input type="checkbox" placeholder="记住我" name="remember-me">
    4. 记住我
    5. label>
    6. div>

    在登陆成功时进行判断,如果用户勾选了记住我,那么就讲Cookie存储到本地

    1. if(map.containsKey("remember-me")){ //若勾选了勾选框,那么会此表单信息
    2. Cookie cookie_username = new Cookie("username", username);
    3. cookie_username.setMaxAge(30);
    4. Cookie cookie_password = new Cookie("password", password);
    5. cookie_password.setMaxAge(30);
    6. resp.addCookie(cookie_username);
    7. resp.addCookie(cookie_password);
    8. }

    修改一下默认的请求地址,现在一律通过`http://localhost:8080/yyds/login`进行登陆

    添加GET请求的相关处理

    1. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    2. Cookie[] cookies = req.getCookies();
    3. if (cookies != null) {
    4. String username=null;
    5. String password=null;
    6. for (Cookie cookie : cookies) {
    7. if (cookie.getName().equals("username")) {
    8. username = cookie.getValue();
    9. }
    10. if (cookie.getName().equals("password")) {
    11. password = cookie.getValue();
    12. }
    13. }
    14. if (password != null && username != null) {
    15. try (SqlSession sqlSession = factory.openSession(true)) {
    16. TestMapper mapper = sqlSession.getMapper(TestMapper.class);
    17. User user = mapper.getUser(new User(username, password));
    18. if (user != null) {
    19. resp.sendRedirect("Servlet2");
    20. return; //直接返回
    21. } else {
    22. for (Cookie cookie : cookies) {
    23. if (cookie.getName().equals("username")) {
    24. cookie.setMaxAge(0);
    25. }
    26. if (cookie.getName().equals("password")) {
    27. cookie.setMaxAge(0);
    28. }
    29. }
    30. }
    31. }
    32. }
    33. }
    34. req.getRequestDispatcher("/").forward(req, resp); //正常情况还是转发给默认的Servlet帮我们返回静态页面
    35. }

    现在,30秒内都不需要登陆,访问登陆页面后,会直接跳转到Servlet2页面

  • 相关阅读:
    【ELM预测】基于matlab探路者算法优化极限学习机预测(含前后对比)【含Matlab源码 2204期】
    读书笔记(二)——《被讨厌的勇气》
    Python 二叉树的基本操作实现
    Mybatis的mapper使用springbootTest报错Find why ‘xxxMapper‘ could be null
    卫生纸标准及鉴别
    【计算机组成原理】指令系统(一)—— 指令格式
    开发知识点-Django
    View菜单解析
    SQL binary 轉float 絕對好用
    【测试工具】UnixBench 测试
  • 原文地址:https://blog.csdn.net/weixin_51992178/article/details/126797799