cookie和session

本文介绍了Servlet中如何通过Cookie和Session进行会话管理,包括它们的工作原理、创建及使用方法。此外还探讨了HTTP无状态特性及如何解决由此带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet获取表单信息

  1. 通过HttpServletRequestgetParameter()方法来获得客户端传递过来的数据
  2. getParameter()方法返回一个字符串类型的值
  3. getParameterNames()返回Enumeration类型的值,getParameterValues()返回一个字符串数组
HTTP状态处理
由于HTTP是无状态的,所以可以使用Cookie来保存信息
  1. Http协议的无连接性要求出现一种保存C/S间状态的机制
  2. Cookie:保存到客户端的一个文本文件,与特定客户相关
  3. Cookie以“名-值”对的形式保存数据
  4. 创建Cookie:newCookie(name,value)
  5. 可以使用Cookie的setXXX方法来设定一些相应的值
setName(String name)/getName()
setValue(String value)/getValue()
setMaxAge(int age)/getMaxAge()
利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端
利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组

Cookie

  1. 服务器可以向客户端写内容
  2. 只能是文本内容(4k)
  3. 客户端可以阻止服务器写入
  4. 只能拿自己webapp写入的东西
  5. Cookie分为两种(属于窗口/子窗口(放在内存中的),属于文本(有生命周期的))
  6. 一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到(路径= URL)(路径 !=真实文件路径)
Session
  1. 在某段时间一连串客户端与服务器端的“交易”
  2. Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
  3. 通过HttpSession来读写Session
  4. 如果浏览器支持Cookie,创建Session的时候会把SessionID保存在Cookie
  5. 如果不支持Cookie,必须自己编程使用URL重写的方式实现Session(response.encodeURL(),转码,URL后面加入SessionId)
  6. Session不象Cookie拥有路径访问的问题(同一个application下的servlet/jsp可以共享同一个session,前提是同一个客户端窗口)
HttpServletRequest中的Session管理方法
  1. getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。
  2. getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession
  3. isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
  4. isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true
  5. isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false
  6. ³HttpSession的常用方法:
    getAttributeNames()/getAttribute()
    getCreateTime()
    getId()
    getMaxInactiveInterval()
    invalidate()
    isNew()
    setAttribute()
    setMaxInactivateInterval()
Session总结
服务器的一块内存(存key-value)
和客户端窗口对应(子窗口)(独一无二)
客户端和服务器有对应的SessionID
客户端向服务器端发送SessionID的时候两种方式:(cookie(内存cookie),rewriten URL
浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie

Application
  1. 用于保存整个WebApplication的生命周期内都可以访问的数据
  2. 在API中表现为ServletContext
  3. 通过HttpServlet的getServletContext方法可以拿到
  4. 通过ServletContext的 get / setAttribute方法取得/设置相关属性





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值