Java Web之Cookie、Session快速扫盲

mac2022-06-30  21

申明一下,本博客较适合第一次接触Cookie、Session的新手。

一、Cookie

cookie的英文为饼干、小甜点,但是在计算机中可以把它认为一种记录某种信息的标签。这玩意在浏览器中很常见,浏览器一般都有清除缓存、cookie、登录账号的功能。Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据。

1.1、Cookie是如何产生的?有什么作用?

假设浏览器是顾客,服务器是商家,那么Cookie就类似于VIP。当浏览器第一次访问服务器时,服务器为了方便提供更好的服务,给浏览器一些Cookie。(类似于免费给个VIP,吸引顾客的套路) 当浏览器再次去访问服务器时,浏览器会带上Cookie(有VIP还不用?),服务器一看浏览器有Cookie赶紧请他到里面坐,端茶的端茶、倒水的倒水。。。 那么真正的Cookie类似这个作用,当浏览器访问服务器时,服务器强制塞给浏览器一些加密的信息(防止破解),当浏览器再次去访问该服务器,它会自动带上之前的Cookie信息,这样服务器一看就是认得出来。当然Cookie也有大小、存活时间限制,所有浏览器需要定期清理一些无用的Cookie垃圾信息。

1.2、Cookie在哪?怎么查看?

从上的叙述看的出 Cookie放在了浏览器端,大多浏览器都可以查看。比如谷歌、火狐、Edge浏览器,按一下F12调出开发者工具。 在百度任意输入一个关键字搜索

1.3、 Cookie类的方法
javax.servlet.http.Cookie 类用于创建一个Cookie response接口中定义了一个addCookie()方法,它用于在其响应头中增加一个相应的Set-Cookie头字段 request接口中也定义了一个getCookies()方法,它用于获取客户端提交的Cookie 构造方法: public Cookie(String name,String value) 设置、获取值: setValue()getValue() 设置、获取最长存活时间: setMaxAge()getMaxAge() 设置、获取路径: setPath()getPath() 设置、获取域: setDomain()getDomain() 获取cookie的名字: getName()
1.4、Cookie细节
1、一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)(value中不能含有空格、逗号、分号!!!)。 2、一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。 3、浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。 4、如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
1.5、Cookie实战

特意写了两个小demo,向加深理解的可以看看。 Java Web 基于Cookie记住用户名 Java Web 基于Cookie记住已浏览过的书籍

二、Session

session的英文大意为开会、会议的意思,在计算机中大多称为“会话”,浏览器访问一次服务器包括中间的信息传输,这个过程可以称为一个会话。Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

2.1、Session是如何产生的?有什么作用?

Session的作用非常类似于Cookie,作用都是用存放重要信息。当浏览器访问服务器,服务器塞给浏览器一个唯一的JSESSIONID,这玩意也是一个Cookie,并且服务器在服务端记录这个JSESSIONID,当浏览器再次访问(会自动带上JSESSIONID),服务器一看到这个JSESSIONID就知道这是VIP用户。

2.2、Session能否查看?

Session是放在服务器端的,所以浏览器客户端无法查看,但是JSESSIONID是一个Cookie,所以JSESSIONID是可以在开发者工具中进行查看的。

2.3、既然已经有了Cookie,为啥还要Session?

Cookie是放在浏览器端的,并且户可以随意查看,所以安全性较低,有些不怀好意的人会进行破解,比如Cookie欺骗。Session是放在服务器端,相对较为安全,但是同样会占用服务器的资源,所以Session也有大小、个数的限制。

2.4、 HttpSession类的方法
void setAttribute(String name,Object value); 网session中添加、修改属性 Object getAttribute(String name); 获取session中的属性 void removeAttribute(String name); 移除session中的属性 HttpSession.getId() 获取该session对应的id,也就是cookie中的JSESSIONID setMaxInactiveInterval(int interval) 设置session的存活时间 invalidate() 使此会话HttpSession无效
2.5、 Session的持久化

由于session是存放在服务器的内存中,当服务器关闭、重启,那么所有的session都会丢失,这可能会造成一些的问题。所以当服务器关闭、重启时,我们可以把它写入磁盘,当再次启动服务器时,又读入内存。那么这个存入磁盘的过程就叫做session的持久化。

Session实战

Java Web 基于Session模拟购物车

欢迎大家在评论区留言评论、交流!

最新回复(0)