使用session和cookie,每个用户对应一个session_id,还要有一个失效日期。session_id存在cookie中。
session存在一致性问题,就是在负载均衡情况下,如果把session存在某一个应用服务器下,如果下次请求的是集群中的另一个服务器,那么就需要重新登录。
所以比较好的解决方案就是单独设置一个session服务器可以是mysql服务器,更好的是redis服务器。
session id 必须是随机的,如果是简单数字,那么有可能被伪造,冒充登录。其实无论多么复杂,可能还是有伪造的可能性
还有一种方法是使用token。
浏览器第一次访问服务器的时候会在服务端生成session,有一个sessionid和它对应
sessionid的生成方式:随机数+时间戳。
session可以存放在内存中,也可以持久化到数据库或者文件中。
服务端将sessionID通过cookie的形式发给客户端。session的销毁只能通过invalidate和超时。关闭浏览器并不会关闭session,因为session存放在服务端。
Java使用HttpServletRequest的getSession(true)方法创建的。在创建Session的同时,服务器会为该Session生成唯一的sessionID。而这个sessionID在随后的请求中会被用来获得已经创建的Session。在Session被创建之后,就可以调用Session的相关方法往Session中增加内容了。而这些内容只会被保存在服务器中,发到客户端的只有SessionID.当客户端再次发送请求的时候,会将这个session id带上。服务器收到请求之后就会依据SessionID找到对应的Session,从而再次使用它。