JavaWeb——Cookie、Session

Cookie对象

会话
在计算机术语中,会话是指一个终端用户与交互系统进行通讯的过程,比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。

为了识别不同的请求是否来自同一客户,引用HTTP会话机制,即:多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)。通过会话管理对会话进行创建、信息存储、关闭等。
cookie存在在浏览器,session存储在服务器中。

客户端发起不带会话ID(SESSION ID)的HTTP请求,

服务端认为还没产生会话,即创建会话,

生成会话ID并且在服务器中存储相关会话信息,并通知客户端已开启会话。
一般情况下,是在返回给客户端的HTTP header中的COOKIE项中附带上会话ID,形式为:会话标记:会话ID。Cookie对象。

客户端根据返回的信息头,设置本地COOKIE值并存储。

再次访问时,浏览器会将Cookie对象一起发送到服务器

服务器识别cookie,判断浏览器身份

创建Cookie

package beer.onexone.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("all")
@WebServlet("/SetCookie")
public class SetCookie extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//创建并发送Cookie到浏览器	
		Cookie cookie = new Cookie("username", "we");
		response.addCookie(cookie);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

获取浏览器的Cookie

package beer.onexone.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("all")
@WebServlet("/GetCookie")
public class GetCookie extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//通过HttpServletRequest对象取获取Cookies集合
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			for (Cookie cookie : cookies) {
				System.out.println(cookie.getName()+"="+cookie.getValue());
			}
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  1. 会话级Cookie
    随浏览器关闭而销毁
  2. 持久化Cookie
    设置有效时chang,超过有效时间后Cookie销毁

设置cookie的有效路径

有效路径:浏览器发送请求时,cookie的代入路径。

请求路径 等于或者包含cookie的有效路径,该cookie会在请求时被代入。
请求路径是从资源位置开始进行判断

setPath(String uri) 设置Cookie的有效路径。 如果设置有效路径,setPath(“/web/aa”); 访问路径:localhost:8080/web/aa        带入Cookie localhost:8080/web/aa/bb         带入Cookie localhost:8080/web/cc/aa          不会带入Cookie

Session

解决了Cookie数据个数较少存储量少、信息储存在本地的问题。

Session对象储存在服务器端,而用户端储存SessionID

Session作用域:
一次会话,从获取Session开始到关闭网站访问
创建:request.getSession();
销毁:
TomCat服务器默认最后一次访问30分钟后销毁
手动调用session.invalidate();

HttpSession session= request.getSession();

public HttpSession getSession() 底层执行原理:根据客户端携带的sessionid查询用户的session对象,如果找到就返回该用户的session对象,如果找不到,就创建一个新的session对象。
public HttpSession getSession(boolean create) 底层执行原理:根据客户端携带的sessionid查询用户的session对象,如果找到就返回该用户的session对象。 如果找不到,并且create是true,创建一个新的session对象。 如果找不到,并且create是false,返回一个null.

作用域:可以存、取数据,数据有作用范围,这就是一个作用域。
session作用域:一次会话。从打开浏览器开始访问网站开始到关闭浏览器结束对网站的访问。介于ServletContext和request之间。

ServletContext:整个web应用。
创建:服务器启动。
销毁:服务器关闭。
Session:一次会话;
创建:request.getSession();
销毁:默认是三十分钟。

常用方法:

方法声明 功能描述
String getId() 用于返回与当前HttpSession对象关联的会话标识号
long getCreationTime() 返回Session创建的时间,这个时间是创建Session的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式
long getLastAccessedTime() 返回客户端最后一次发送与Session相关请求的时间,这个时间是发送请求的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式
void  setMaxInactiveInterval(int interval) 用于设置当前HttpSession对象可空闲的以秒为单位的最长时间,也就是修改当前会话的默认超时间隔
boolean isNew() 判断当前HttpSession对象是否是新创建的
void invalidate() 用于强制使Session对象无效
ServletContext getServletContext() 用于返回当前HttpSession对象所属于的WEB应用程序对象,即代表当前WEB应用程序的ServletContext对象
void setAttribite(String name,Object value) 用于将一个对象与一个名称关联后存储到当前的HttpSession对象中
String getAttribute() 用于从当前HttpSession对象中返回指定名称的属性对象
void removeAttribute(String name) 用于从当前HttpSession对象中删除指定名称的属性

jingsongchan

发表评论

电子邮件地址不会被公开。 必填项已用*标注