Cookie和Session

本文介绍了 HTTP 协议中 Cookie 的作用及其使用方法,包括如何创建、设置有效期、路径及域名等属性,以及如何通过 Cookie 实现自动登录等功能。

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

Cookie

为什么要有这个Cookie

http的请求是无状态。 客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 (自动登录)。

Cookie cookie=new Cookie("username",username);
response.addCookie(cookie);

获取Cookie

Cookie[] coo=request.getCookies();
		if(coo!=null)
		{
			for(Cookie c:coo)
			{
				System.out.println(c.getName()+"dd"+c.getValue());
			}
		}
//关闭浏览器后,cookie就没有了。 ---> 针对没有设置cookie的有效期。
		//	expiry: 有效 以秒计算。
		//正值 : 表示 在这个数字过后,cookie将会失效。
		//负值: 关闭浏览器,那么cookie就失效, 默认值是 -1
		cookie.setMaxAge(60 * 60 * 24 * 7);
		
		//赋值新的值
		//cookie.setValue(newValue);
		
		//用于指定只有请求了指定的域名,才会带上该cookie
		cookie.setDomain(".itheima.com");
		
		//只有访问该域名下的cookieDemo的这个路径地址才会带cookie
		cookie.setPath("/CookieDemo");

通过Cookie获取上次登陆时间

		//response.getWriter().append("Served at: ").append(request.getContextPath());
		//System.out.println(request.getParameter("username"));
		String name=getServletContext().getInitParameter("name");
		//response.setCharacterEncoding("UTF-8");
		//response.setHeader("Content-Type","text/html;charSet=UTF-8" );
		response.setContentType("text/html;charSet=UTF-8");
		//System.out.println(name);
		Cookie[] coo=request.getCookies();
		long lastTime=0;
		
		if(coo!=null)
		{
			for(Cookie c:coo)
			{
			if(c.getName().equals("last"))
			{
				lastTime=Long.parseLong(c.getValue());
			}
			if(lastTime!=0)
			{
				//response.addCookie("last",System.currentTimeMillis()+"");
				response.getWriter().write("最后一次登陆时间"+new Date(lastTime));
				c.setValue((System.currentTimeMillis()+""));
				response.addCookie(c);
				
			}else
			{
				Cookie timeCokie=new Cookie("last",System.currentTimeMillis()+"");
				response.addCookie(timeCokie);
			}
			
				System.out.println(c.getName()+"dd"+c.getValue());
			}
		}
		if(name.equals("nie"))
		{
			//Connection con=JDBC.setConnetcion();
			Driver driver = null;
			Connection con = null;
			Statement state = null;
			ResultSet result = null;
			try {
				driver = new Driver();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				// 注册驱动
				DriverManager.registerDriver(driver);
				// 建立连接
				con = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "sasa");
				// 创建statement对象
				state = con.createStatement();
				// 执行查询
				String username=request.getParameter("username");
				String sql = "SELECT username,PASSWORD FROM USER";
				result = state.executeQuery(sql);
				Boolean foo=false;
				while (result.next()) {
					String names=result.getString("username");
						if(names.equals(username))
						{
							System.out.println("success");	
							foo=true;
							Cookie cookie=new Cookie("username",username);
							cookie.setMaxAge(60);
							response.addCookie(cookie);
							//response.sendRedirect("FileDownLoad.html");
							//request.getRequestDispatcher("FileDownLoad.html").forward(request, response);
							break;
						}
				}
				if(!foo)
				{
					System.out.println("faile");
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				try {
					if (result != null) {
						result.close();
					}

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					if (state != null) {
						state.close();
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					if (con != null) {
						con.close();
					}

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}

Session

 Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。 Session是,数据存放在服务器端。

//常用方法
//得到会话ID
String id = session.getId();

//存值
session.setAttribute(name, value);

//取值
session.getAttribute(name);

//移除值
session.removeAttribute(name);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值