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了,个人项目而已