session和cookie

Posted 人帅也要多努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session和cookie相关的知识,希望对你有一定的参考价值。

一:Session

1.Session作用于服务器端,在客户端第一次请求服务器的时候创建,并存放于内存,每个用户都有一个Session。(需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问html、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session)

2.Session生成后,用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。为防止内存溢出,服务器会把长时间内没有活跃即超时的Session从内存删除。

3.Session的尽量只存放一些重要的数据,减小内存占用,防止并发访问内存溢出。

4.Session统计同时在线人数,通过创建实现HttpSessionListener接口的监听器,每次创建Session次数+1,每次销毁-1;

5.服务器会为每个Session创建一个唯一的ID,这个SessionId在客户端与服务端会话是十分重要;

二:Cookie

1.Cookie属于浏览器管理,具有不可跨域名性。由于HTTP协议是无状态且是不安全的,所以Cookie的值常加密后保存。

2.一个用户的所有请求操作都应该属于同一个会话,不同的用户拥有不同的会话,而http请求是无状态的,那服务器怎么将这么多请求划分到具体用户的会话中呢?服务器在创建Session后会创建一个用来确认身份JSESSIONID、值为该SessionId的Cookie,并发送给客户端浏览器,并保存在浏览器。

3.Cookie的基本用法:

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
cookie.setPath("/keepft/");                              // 设置路径
cookie.setDomain(".keepft.com");          // 设置域名
response.addCookie(cookie);                          // 输出到客户端

cookie.setMaxAge(maxAge):maxAge(秒)为正数时表示该Cookie会在maxAge秒之后自动失效,浏览器会将该Cookie写到本地文件中,即使浏览器关闭,在maxAge秒之前再打开浏览器该Cookie仍可用
  maxAge为-1时表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。(例如窗口打开的<iframe></iframe>子窗口)
  maxAge为0时表示删除该Cookie(Cookie用此方法删除Cookie,需要new一个Name一样新Cookie,并将Value设置为“”;修改一个cookie类似)
cookie.setPath(path):path设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。
cookie.setDomain(domian):domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。(Cookie是不可跨域名的)

以上是关于session和cookie的主要内容,如果未能解决你的问题,请参考以下文章

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

Cookie和Session的工作流程及区别(附代码案例)

cookie和session

cookie和session

cookie和session

会话技术知识点整理(Cookie和Session)