Cookie
Cookie出现的原因
1.http是无状态的连接,在某些时候需要对客户端进行标识。
2.仅使用ip地址无法正确标识客户端(NAT网络地址转换等原因)。
3.解决了需要重复登录的问题
Cookie定义
客户端会话技术,第一次访问服务器时服务器会给予该客户端一个标识,下次访问时会携带该标识。
Cookie示例(添加Cookie)
Cookie cookie = new Cookie("username","zhangsan"); response.addCookie(cookie);
Session
Session出现的原因
在客户端拥有了Cookie后,在服务器端也需要一个机制来确保服务器内部标识一个用户,并有效的记录相关信息。
Session定义
服务器端会话技术,服务器给与客户端一个标识,记录客户端的某些动作及信息。
Session示例
HttpSession session = request.getSession();
联系与区别
Cookie与Session往往是同时使用的,在客户端使用Cookie保存用户的账号信息等,在服务器端使用Session来记录用户的行为。
Cookie保存在本地浏览器中,存储大小一般不超过4kB,Session保存在服务器中,存储大小与服务器配置与算法有关。存储在本地的Cookie有可能被坏人获取,从而跳过登录直接使用Cookie登录账户,而Session保存在服务器中,安全性要由于Cookie。
Cookie与Session均拥有存活时间,通过 setMaxAge()
设置存活时间:
1.正数代表存活时长/单位为秒
2.负数表示退出浏览器即销毁
3.0表示立即销毁(在API中并没有专门的销毁接口)
同一个浏览器在Cookie(Session)存活时间内,多次访问服务器获得的Cookie和Session是相同的,许多记录密码的Cookie存活时间可长达数月,而Session的存活时间由服务提供商决定。
Cookie和Session的出现都是为了在http这种无状态的连接下,进行相对“有状态”的连接,不使用账号密码这种硬性登录方案,而是在服务器与浏览器之间形成一种协议,通过合理的设置分配标识码来识别不同用户,在一定程度上改善了用户体验,给服务提供商确定用户需求提供了便利,但同时也带来了如Cookie欺骗等账号风险。