利用session或cookie存用户信息的实现

session其实归根结底还是cookie,只是比cookie更安全,所以不能存同名的信息。
但是session中可以存一个对象,取出来也是对象,cookie中不能存对象,只能存字符串,所以存的时候需要把对象序列化为json,取得时候又要把json反序列化为对象
我第一次用springboot推荐的thymeleaf模板引擎,所以试了一下先用他存取session中数据,代码如下:

//后端代码,用户登录了把用户信息存进session
 @PostMapping("/login")
 @ResponseBody
 public ResponseBo login(HttpServletRequest request,HttpServletResponse response,String name,String pass){
                User user=userService.findUserByName(name);
                request.getSession().setAttribute("user1",user);
                return ResponseBo.ok();
    }
#前端代码用thymeleaf的语法实现
#thymeleaf自带的内置对象httpSession,注意加#
<li class="layui-nav-item lastli" th:if="${#httpSession.getAttribute('user1') == null}">
      <a th:href="@{user/register_page}" target="">注册</a>
</li>
#这里使用的 th:object获取的user对象后面就可以直接写对象内的属性访问对象了,当然也可以用th:with 赋值后面访问对象的属性用 . 进行访问
<li class="layui-nav-item" style="float: right" th:if="${#httpSession.getAttribute('user1') != null}" th:object="${#httpSession.getAttribute('user1')}">
        <a href=""><img th:src="@{'img/avator/'+*{pic}}" class="layui-nav-img"></a>
</li>

下面是用cookie进行存储:
想了一下cookie存储可以用三种思路,
1、后台用response.setCookie()存入信息,前台获取然后进行验证(前台获取可以通过httpServletRequest.getCookies()获取,这种一般用于页面,也可以通过document.cookie获取,后者用于js)
2、后台存入了,然后下一次访问的时候由后台取cookie,因为存入cookie的信息是跟httpServletRequest绑在一起的,下次客户端访问的时候又会带着信息去访问服务器。
3、前端存入,前端或后端获取。
好吧,研究了半天,发现想用模板引擎去获取太难了,主要是搞什么前后端分离前端不能用<%%>这个了,难受,所以还是搞个接口每次用户进入的时候都调接口给后端去整吧。当然还有种选择是js,但需要进行序列化等操作。
在使用接口的过程中坑也是不少的,比如:
cookie中只能存字符串就算了,还不能存"" 空格 等字符,所以存实体类,json都不行,存了半天存不进去,我又试着网上方法去用utf-8编码存入,取出解码,但是错误总是报不完的,又出现了下面截图的错误,最终决定还是用session了,个人项目而已
在这里插入图片描述

发布了44 篇原创文章 · 获赞 3 · 访问量 1367

猜你喜欢

转载自blog.csdn.net/weixin_43329639/article/details/103525081