前言:
客户端向服务端发请求,登陆完之后,进入到首页,如何让客户端知道它有没有登陆过呢,需要从首页里面向服务器发出异步请求,请求当前登录的用户信息,登录过就能获取得到,没登陆过获取不到。
关于会话的概念:有n多个客户端访问同一个服务器,服务器会根据访问的客户端创建一个这个客户端专属的会话对象,它能避免客户端之间的信息不会冲突,会话的作用就是用来记录客户端的行为的。比如在登录过后就会在会话里面增加一个标识存个东西,然后进入首页之后,发出异步请求时就是获取这个东西,如果有就能判断登陆过。即:客户端向服务器发请求时,服务器会针对于当前的客户端创建一个与之相对应的会话对象, 这个会话对象是用来记录客户端行为的对象, 同一个客户端的多次请求共享同一个会话对象
实现:
通过会话对象可以记录客户端的登录状态, 在客户端登录成功时, 可以把登录成功时 的UserVO保存到会话对象里面,之后同一客户端发出的请求可以访问此会话对象, 如果里面有UserVO代表登录过, 没有则代码没有登录过,如下步骤:
在登录成功时 把从数据库中查询到的UserVO保存进会话对象中
补充:这里的“user”可以理解为map的key,可以取任何名字,取得时候会用到它,user则对应value。 HttpSession是同一个变量,不同的对象,不同客户端来访问就代表对应的客户端。
进入页面便发送请求:
从会话对象中获取当前登录的用户对象
补充:这里能从session拿到Uservo是因为springmvc会自动去找到和当前客户端对应的会话对象。同时因为有多个客户端,为了保证唯一性,内部会在创建了会话对象之后会给客户端响应一个id,之后的每次请求都会带着这个id,就能找到所对应的会话对象了。同一个客户端不同的浏览器会有多个会话对象,因为这个id保存在浏览器的,换了一个浏览器后就不会带着id去访问。
测试:用if else在登录成功的时候展示不同的页面
退出登录
退出登录时需要将会话对象里面的user删除