HTTP Cookie/Session

1.HTTP协议

HTTP协议是一个无状态协议,服务器无法判断若干个请求是否来自同一个浏览器,无法与浏览器进行会话。

2.HTTP会话控制:Cookie

Cookie技术是使用在浏览器端的一种缓存技术,

在浏览器第一次向服务器发出请求,在服务器端会创建Cookie对象,并以键值对的形式在响应头中返回。

下一次向服务器发送请求时,会在请求头中将Cookie信息携带。

(1)Cookie的创建与返回

在服务器端通过 new Cookie(key, value)的方式创建。

并以response.addCookie(cookie)的方式返回给浏览器。

(2)Cookie的获取

在服务器端通过request.getCookies()方法获取,得到一个Cookie数组

如果Cookie数组不包含Cookie,则Cookie数组为null。

(3)Cookie的时效(setMaxAge(seconds))

会话级:保存在浏览器运行过程内存中,浏览器一关闭,Cookie就失效。(seconds为负数),默认。

持久化:保存在本地文件系统中,保存(seconds)长。(seconds为正数)。

(4)删除Cookie

setMaxAge(0)

3.HTTP会话控制:Session

Session技术是使用在服务器端的一种缓存技术,但是它依赖于Cookie。

(1)浏览器请求信息中不包含JSESSIONID的Cookie

服务器端会通过getSession来创建一个Session对象。

创建一个name值为JSESSIONID的Cookie返回给浏览器

(2)请求信息中包含JSESSIONID的Cookie

根据JSESSIONID的值,在服务器端查找已经存在的Session对象

①若能找到,则返回找到的Session对象(Session对象以键值对的形式保存在服务器端)

②若找不到,则创建一个Session对象,并返回JSESSIONID的Cookie(包含伪造JSESSIONID的情况)

(4)Session对象持久化

    HttpSession session = request.getSession();

    String id = session.getId();

    Cookie cookie = new Cookie("JSESSIONID", id);

    cookie.setMaxAge(30);

    response.addCookie(cookie);

(5)设置Session对象的有效时间

    HttpSession session = request.getSession();

    session.setMaxInactiveInterval(10);

(6)设置Session强制失效

    HttpSession session = request.getSession();

    session.invalidate();

(7)若浏览器禁用Cookie,可以通过Session的URL重写

    HttpSession session = request.getSession();

    session.setAttribute("attrName", "testValue");

    String url = "target url";

    url = response.encodeURL(url);

    response.sendRedirect(url);

 ★如果目标页面也需要使用保持Session会话,则同样需要实现URL重写

String url = response.encodeURL(request.getContextPath()+"/nextTarget.jsp");

4. 需要注意的几点:

(1)Session的空闲时间:Session对象没有被浏览器端访问的时间间隔

(2)关于 request.getSession()

    当前Servlet是客户端访问的第一个Web资源则创建Session对象。这里有一个特殊情况,就是JSP页面上使用page指令指定了session="false",这时不会创建Session对象。

(3)关于 session=“false”

    当前页面禁用session隐含变量,但是可以使用其他显式的HttpSession对象。

5.总结:

说白了,Cookie就是服务器端和浏览器端通信的一个识别码。

HTTP是一个无状态的协议,服务器和浏览器之间的会话是通过Cookie来维系的(JSESSIONID),Session是建立在Cookie之上来使用的。

转载于:https://my.oschina.net/javaGeeker/blog/675170

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值