欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅谈cookie && session

程序员文章站 2022-03-30 08:57:52
...

浅谈cookie && session

HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。为了克服这一缺点,所以引入了cookie,session技术。当然无状态协议也有优点,由于不必保存状态,所以可以减少服务器的CPU及内存资源的消耗。

关于cookie和session其实都是为了记录用户状态,它们的区别是cookie将状态信息保存在浏览器上,而session是将信息保存在服务器上。session是依赖于cookie的,因为它需要cookie来保存sessionID.本质上来说两者是相同的。session在一定程度上保证了用户信息的安全,但是cookie和session也都是可以被伪造的。

1 Cookie

(1)定义:Cookies 是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息
(2)作用: 会话保持,如完成用户的登录与状态保持

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。而服务器在得到客户端发送过来的Cookie后,会去检查是哪一个客户端发来的请求,然后对比服务器上的记录,得到该客户端之前的状态信息。

服务器设置Cookies 通常设置在HTTP 头信息中:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;
                path=/; domain=bit.com
Connection: close
Content-Type: text/html

如果用户的浏览器指向任何匹配该Cookie 的路径和域的页面,它会重新发送Cookie 到服务器。浏览器的头信息

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Servlet 能够通过请求方法request.getCookies() 访问Cookie,该方法将返回一个Cookie 对象的数组

(3)Servlet 操作cookie方法
public void setDomain(String pattern):该方法设置cookie 适用的域,例如w3cschool.cn。
public String getDomain():该方法获取cookie 适用的域,例w3cschool.cn。
public void setMaxAge(int expiry):该方法设置cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前session 会话中持续有效。
public int getMaxAge():该方法返回cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示cookie 将持续下去,直到浏览器关闭。
public String getName():该方法返回cookie 的名称。名称在创建后不能改变。
public void setValue(String newValue):该方法设置与cookie 关联的值。
public String getValue():该方法获取与cookie 关联的值。
public void setPath(String uri):该方法设置cookie 适用的路径。如果不指定路径,与当前页面相同目录下的(包括子目录下的)所有URL 都会返回cookie。
public String getPath() :该方法获取cookie 适用的路径。

2 Session

(1)定义: session 是存储在服务器上的文本文件,并保留了用户的各种跟踪信息
(2)作用: 会话保持,如完成用户的登录与状态保持,因为在服务器端,所以相对安全一些

Servlet 操作session方法
HttpSession 对象

  • Servlet 还提供了HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。
  • Servlet 容器使用这个接口来创建一个HTTP 客户端和HTTP 服务器之间的session会话。会话持续一个指定的时间段,跨多个连接或页面请求。
  • 我们可以通过调用HttpServletRequest 的公共方法getSession() 来获取
    HttpSession 对象,如下所示:
HttpSession session = request.getSession();

需要在向客户端发送任何文档内容之前调用request.getSession()

(3)HttpSession 对象中可用的几个重要的方法:
public Object getAttribute(String name) :该方法返回在该session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回null。
public Enumeration getAttributeNames():该方法返回String 对象的枚举,String 对象包含所有绑定到该session 会话的对象的名称。
public long getCreationTime() :该方法返回该session 会话被创建的时间,自格林尼治标准时间1970 年1 月1 日午夜算起,以毫秒为单位。
public String getId() :该方法返回一个包含分配给该session 会话的唯一标识符的字符串。
public long getLastAccessedTime():该方法返回客户端最后一次发送与该session 会话相关的请求的时间自格林尼治标准时间1970 年1 月1 日午夜算起,以毫秒为单位。
public int getMaxInactiveInterval(): 该方法返回Servlet 容器在客户端访问时保持session 会话打开的最大时间间隔,以秒为单位。
public void invalidate() :该方法指示该session 会话无效,并解除绑定到它上面的任何对象。
public boolean isNew():如果客户端还不知道该session 会话,或者如果客户选择不参入该session 会话,则该方法返回true。
public void removeAttribute(String name):该方法将从该session 会话移除指定名称的对象。
public void setAttribute(String name, Object value):该方法使用指定的名称绑定一个对象到该session 会话。
public void setMaxInactiveInterval(int interval):该方法在Servlet 容器指示该session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

相关标签: JavaWeb