JavaWeb学习之Cookie&Session

Cookie

简介

是某些网站为了辨别用户身份,进行session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。HTTP协议本身是无状态的。Cookie实际上是一小段的文本信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

基本组成

Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌。

Expires:用来设置Cookie的生存期。包括会话性与持久性两种存储类型。默认为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效。

Path:定义了Web站点上可以访问该Cookie的目录。

Domain:指定了可以访问该 Cookie 的 Web 站点或域。允许子域设置或获取父域的Cookie,当需要实现单点登录方案时,Cookie 的上述特性非常有用,同时也增加了 Cookie受攻击的危险。

Secure:指定是否使用HTTPS安全协议发送Cookie。保护Cookie在浏览器与服务器之间传输的时候不被窃取和篡改。

HTTPOnly:用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。

一些细节问题

一个Cookie只能保存一个信息;

一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;

Cookie大小有限制4kb;

浏览器的上线为300个cookie。

一些操作

URLEncoder.encode("这是一个示例!","utf-8")
URLDecoder.decode(cookie.getValue(),"UTF-8")


Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie

Session

简介

在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。

一些操作

//得到Session
HttpSession session = req.getSession();

Person person = (Person) session.getAttribute("name");

System.out.println(person.toString());

HttpSession session = req.getSession();
session.removeAttribute("name");
//手动注销Session
session.invalidate();

web.xml配置(可设置失效时间)

<!--设置Session默认的失效时间-->
<session-config>
    <!--xx分钟后Session自动失效,以分钟为单位-->
    <session-timeout>xx</session-timeout>
</session-config>
经验分享 程序员 微信小程序 职场和发展