Java学习之Cookie&Session

CookieSession都是为了解决一个问题:Http协议无状态问题。

 

Http协议无状态:无状态是指协议对于事务处理没有记忆能力。服务器不知道哪一个客户端请求了自己。

 

Cookie是通过客户端保持状态的解决方案。当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置。客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在Http请求头(Request Header)了。

 

创建Cookie:

   Cookie c = new Cookie(String name,String value);

 

把Cookie放入响应中,从而传递给浏览器:

   response.addCookie(c);

 

修改Cookie存储的值:

  方式1:获取Cookie对象.setValue(String newValue):給当前Cookie设置新值.

  方式2:创建一个同名的Cookie,再放入响应中.

 

Cookie可以存活指定的时间.(记住我一周不用登陆)

  Cookie对象.setMaxAge(int senconds)

 

删除Cookie:

  Cookie对象.setMaxAge(0):设置最大存活时间为0秒.

 

Cookie的中文问题:

   Cookie的属性和值都不支持中文.

   编码:

   Cookie c = new Cookie("currentName", URLEncoder.encode(username, "UTF-8"));

   解码:

   username = URLDecoder.decode(c.getValue(), "UTF-8");

 

Cookie的缺陷:

   1:若多个人共有同一台电脑,不安全(Cookie信息保存在浏览器中).

   2:一个站点支持的Cookie数量和大小是有限的.

   3:中文处理麻烦.

   4:每一个Cookie只能存储一个值,若要存储多个值,只能搞多个Cookie.

 

Session:解决跟踪用户会话的技术手段. 属于服务端技术.

 

创建/获取Session:

   HttpSession session  = request.getSession(true):获取Session对象,若对象存在,则返回,若不存在,则先创建Session对象,再返回.

   HttpSession session  = request.getSession(false):获取Session对象,若对象存在,则返回,若不存在,则返回null.

   HttpSession session  = request.getSession():等同于request对象.getSession(true);

 

存储和获取数据:

   session.setAttribute(String name,Object value): 把属性和属性值存储到Session中.

   Object val = session.getAttribute(String name): 根据指定的属性名获取对应的属性值.

 

Session中的属性名称,起名任意,当时建议起唯一.在有的公司:XXX_IN_SESSION.

把用户信息存储到Session: USER_IN_SESSION.

一般的,我们往往在登陆的时候,把当期登陆用户信息存储到Session中.

User user = new User(.....);

session.setAttribute("USER_IN_SESSION",user);

一般的,我们把存放于Session中的对象,让他实现java.io.Serializable接口.(多台服务器之间共享Session).

 

方式1:删除Session中的某一个属性.  session.removeAttribute(String name);:根据属性的名称,删除该属性值.

方式2:销毁Session对象(内存空间).  session.invalidate();销毁Session对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值