cookie技术、session技术总结

本文详细解释了Cookie和Session的概念及其在Web开发中的应用,包括Cookie的存储和回传机制,以及Session的跟踪和超时管理。通过实例展示了如何在Servlet程序中使用Cookie和Session进行身份验证和状态维护。
摘要由CSDN通过智能技术生成

Cookie

Cookie是一种在客户端保持HTTP状态信息的技术。 

Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。 

WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。 

Set-Cookie2响应头字段

Set-Cookie2头字段用于指定WEB服务器向客户端传送的Cookie内容,但是按照Netscape规范实现Cookie功能的WEB服务器,使用的是Set-Cookie头字段,两者的语法和作用类似。 

Set-Cookie2头字段中设置的cookie内容是具有一定格式的字符串,它必须以Cookie的名称和设置值开头,格式为名称=,后面可以加上0个或多个以分号(;)和空格分隔的其它可选属性,属性格式一般为属性名=。 

    举例:Set-Cookie2: user=it315; Version=1; Path=/

除了名称=对必须位于最前面外,其它的可选属性的先后顺序可以任意。

Cookie的名称只能由普通的英文ASCII字符组成,浏览器不用关心和理解Cookie的值部分的意义和格式,只要WEB服务器能理解值部分的意义就行。

大多数现有的WEB服务器都是采用某种编码方式将值部分的内容编码成可打印的ASCII字符,RFC 2965规范中没有明确限定编码方式。

头字段中的属性

Comment=value 

Discard 

Domain=value 

例如:Set-Cookie2: user=it315; Version=1; Path=/; Domain=.it315.org

Max-Age=value 

Path=value 

Port[="portlist"] 

Secure 

Version=value 

Cookie请求头字段 

浏览器使用Cookie请求头字段将Cookie信息回送给WEB服务器。 

多个Cookie信息通过一个Cookie请求头字段回送给WEB服务器。  

浏览器根据下面的几个规则决定是否发送某个Cookie信息:

  

  请求的主机名是否与某个存储的CookieDomain属性匹配; 

  请求的端口号是否在该CookiePort属性列表中; 

  请求的资源路径是否在该CookiePath属性指定的目录及子目录中; 

  

  该Cookie的有效期是否已过。

Cookie请求头字段中的每个Cookie之间用逗号(,)或分号(;)分隔。

Cookie请求头字段中除了必须有名称=的设置外,还可以有VersionPathDomainPort等几个属性。

VersionPathDomainPort等属性名之前,都要增加一个“$”字符作为前缀。

Version属性只能出现一次,且要位于Cookie请求头字段设置值的最前面,如果需要设置某个Cookie信息的 PathDomainPort等属性,它们必须位于该Cookie信息的名称=设置之后。

Path属性指向子目录的Cookie排在Path属性指向父目录的Cookie之前。

    

举例:Cookie: $Version=1; Course=Java; $Path=/it315/lesson; Course=vc; $Path=/it315

Servlet程序中使用Cookie 

Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。 

Cookie类的方法: 

构造方法: public Cookie(java.lang.String name,java.lang.String value)

getName方法 

setValuegetValue方法 

setMaxAgegetMaxAge方法 

setPathgetPath方法 

setDomaingetDomain方法 

setVersiongetVersion方法 

setCommentgetComment方法 

setSecuregetSecure方法 

HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增加一个Set-Cookie响应头字段。

HttpServletRequest接口中定义了一个getCookies方法,它用于从HTTP请求消息的Cookie请求头字段中读取所有的Cookie项。

Session

Session的跟踪机制 

Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。 

HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。 

WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。

WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。

Session的超时管理 

WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。 

会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。 

<session-config>

<session-timeout>30</session-timeout>

</session-config>

HttpSession接口中的方法 

getId方法

getCreationTime方法

getLastAccessedTime方法

setMaxInactiveInterval方法

getMaxInactiveInterval方法

isNew方法

    如果客户端请求消息中返回了一个与Servlet程序当前获得的HttpSession对象的会话标识号相同的会话标识号,则认为这个HttpSession对象不是新建的。

invalidate方法

getServletContext方法

setAttribute方法

getAttribute方法

removeAttribute方法

getAttributeNames方法

HttpServletRequest接口中的Session方法 

getSession方法 

public HttpSession getSession(boolean create)

public HttpSession getSession()

isRequestedSessionIdValid方法 

isRequestedSessionIdFromCookie方法 

isRequestedSessionIdFromURL方法 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值