cookie 和session

package com.atguigu.demo;

import java.util.UUID;

public class Demo {

	/**
	 * * Cookie
	  		* 简介
	  			* Cookie实际上就是服务器保存在浏览器上的一段信息,主要用于区分不同的用户。
	  		* Cookie运行原理
	  			* 请求
	  			* 服务器创建一个Cookie对象,该Cookie对象携带用户信息,服务器发送(响应)给客户端
	  			* 以后客户端再发送请求时,会携带该Cookie对象。
	  			* 服务器会根据该Cookie对象(及信息),区分不同用户。  	
	  		* Cookie
	  			* 创建
	  				* Cookie cookie = new Cookie(String name,String value); 
	  				* response.addCookie(cookie);
	  			* 获取
	  				* Cookie[] cookies = request.getCookies(); 
	  				* cookie.getName()|getValue()
				* 修改
					* 覆盖式修改
						* Cookie cookie = new Cookie("同名","新值");
						* response.addCookie(cookie);
					* 直接修改
						* Cookie[] cookies = request.getCookies();	
						* 找到指定的Cookie
						* cookie.setValue("新值");
			* Cookie的键值问题
				* name不可以为中文,value可以为中文,需要指定字符集问题,所有建议使用英文。
	  		* Cookie有效性
	  			* 默认为会话级别,与浏览器有关(关闭浏览器或换一个浏览器失效)
	  			* 持久化
	  				* setMaxAge(ss:秒);
	  					* ss>0:在ss秒后失效
	  					* ss=0:立即失效
	  					* ss<0:默认会话级别
	  			* 注意:持久化Cookie,该Cookie不是会话级别。
	  		* Cookie有效路径
	  			* 默认有效路径:当前项目路径
	  			* setPath():一般设置有效路径,都是基于当前项目下的路径进行设置。
	  				* 如:cookie.setPath(request.getContextPath()+"/a");
	  		* Cookie应用
	  			* 记住密码
	  		* Cookie缺陷
	  			* Cookie的value为String型,不灵活。
	  			* Cookie存放在浏览器中,不安全。
	  			* Cookie过多,会浪费流量。
	   * Session
	   		* 简介
	   			* 类型:HttpSession
	   		* Session工作原理
	   			* 请求
	   			* 服务器创建Session,同时创建一个特殊的Cookie,该Cookie的key为固定值:JSESSIONID,
	   			   value为session的id。
	   			* 服务器将该Cookie对象发送(响应)给客户端
	   			* 以后客户端再请求时,会携带该Cookie对象。
	   			* 服务器会根据Cookie的value,找到相应的Session,从而区分不同的给用户。
	   		* Session获取  
	   			* html(Servlet):request.getSession()
	   			* jsp:直接获取(session是jsp中的隐含对象)
	  		* Session有效性
	  			* 默认有效性:当前会话(因为特殊的Cookie是会话级别)
	  			* 持久化Session
	  				* 持久化特殊Cookie 
	  				* Session存活时间
	  					* 默认存活时间为30分。
	  					* 设置session的非活动时间
	  						* web.xml中
	  						 	<session-config>
					        	   <session-timeout>30分钟</session-timeout>
					    		</session-config>
					    	* session.setMaxInactiveInterval(ss秒);
					    		* ss>0:在ss秒后失效
					    		* ss<=0:永不失效(Tomcat>=7)
					    	* session立即失效
					    		* session.invalidate();	 
	  		* Session钝化与活化
	  			* 钝化:将session对象及session对象中的数据,一同从内存中序列化到硬盘的过程称之为钝化。
	  				  * 时机:服务器关闭时触发
	  			* 活化:将session对象及session对象中的数据,一同从硬盘反序列化到内存的过程称之为活化。
	  				  * 时机:服务器重启时触发 
	  		* 表单重复提交问题
	  			* 转发,F5
	  			* 提交后,网速慢,连续点击提交按钮
	  			* 提交后,点击回退按钮,继续提交
	  				* 提交-Servlet-响应 	
	  				* 思路:在Servlet中干预提交,第一次提交,以后不提交
	  					1. 使用UUID,作为Token。将Token存放到session域和隐藏域中。
	  						* UUID:是一个全球唯一的32为的16进制的随机数。
	  					2. 提交,判断变量是否为初始值
	  					 	true:提交,移除session域中的Token(UUID)。
	  						false:不提交
	 */
	
	public static void main(String[] args) {
		
		String uuid = UUID.randomUUID().toString().replace("-","");
		
		System.out.println(uuid);
		
		
	}
	
}
package com.atguigu.servlet.cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CreateCookieServlet
 */
public class CreateCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//创建Cookie对象,并携带用户信息
		Cookie cookieName = new Cookie("stuName", "zhangsan");
		//响应给客户端
		response.addCookie(cookieName);
		
	}

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

}
package com.atguigu.servlet.cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class GetCookieServlet
 */
public class GetCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取Cookie
		Cookie[] cookies = request.getCookies();
		
		for (Cookie cookie : cookies) {
			System.out.print("cookieName:"+cookie.getName());
			System.out.println("cookieValue:"+cookie.getValue());
		}
		
	}

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

}
package com.atguigu.servlet.cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ChiCookieServlet
 */
public class ChiCookieServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Cookie cookie = new Cookie("stuAge", "18");
		//持久化
//		cookie.setMaxAge(-1);
		//有效路径
		cookie.setPath(request.getContextPath()+"/a");
		response.addCookie(cookie);
	}

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

}
package com.atguigu.servlet.cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class UserServlet
 */
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String rp = request.getParameter("rp");
		if(rp != null) {
			//将数据存放Cookie中
			Cookie cookieName = new Cookie("username", username);
			Cookie cookiePwd = new Cookie("cookiePwd", password);
			//将Cookie持久化
			cookieName.setMaxAge(60);	//7天=60*60*24*7
			cookiePwd.setMaxAge(60);
			//将Cookie响应给浏览器
			response.addCookie(cookieName);
			response.addCookie(cookiePwd);
		}
		//跳转
	}

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

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>CookieDemo</h1>
	<a href="CreateCookieServlet">创建Cookie对象</a><br>
	<a href="GetCookieServlet">获取Cookie对象</a><br>
	<a href="UpdateCookieServlet">修改Cookie对象</a><br>
	<a href="ChiCookieServlet">持久化Cookie对象</a><br>
</body>
</html>
package com.atguigu.servlet.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class ShiSessionServlet
 */
public class ShiSessionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		//设置session失效
		session.invalidate();
	}

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

}
package com.atguigu.servlet.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class GetSessionServlet
 */
public class GetSessionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		System.out.println(session.getId());
	}

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

}
package com.atguigu.servlet.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class ReSubServlet
 */
public class ReSubServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		//分别取session域和隐藏域中的uuid值
		String uuid2 = request.getParameter("uuid2");
		Object uuid = session.getAttribute("uuid");
		//判断是否相等,
		if(uuid != null && uuid.toString().equals(uuid2)) {
			//相等:提交,移除session域中的token
			System.out.println("提交啦!!!哈哈");
			session.removeAttribute("uuid");
		}
		
		System.out.println("end!");
		
	}

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

}
package com.atguigu.servlet.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.atguigu.bean.Student;

/**
 * Servlet implementation class ChiSessionServlet
 */
public class ChiSessionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//持久化Session-》持久化特殊的Cookie
		Cookie[] cookies = request.getCookies();
		for (Cookie cookie : cookies) {
			if("JSESSIONID".equals(cookie.getName())) {
				cookie.setMaxAge(600);
				response.addCookie(cookie);
				break;
			}
		}
		//设置session的非活动时间
		HttpSession session = request.getSession();
		session.setMaxInactiveInterval(600);
		
		session.setAttribute("stu", new Student("zhangsan"));
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	sessionId:<%=session.getId() %><br>
	<a href="GetSessionServlet">获取Session</a><br>
	<a href="ChiSessionServlet">持久化Session</a><br>
	<a href="ShiSessionServlet">设置Session立即失效</a><br>
	student:<%=session.getAttribute("stu") %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>尚硅谷会员登录页面</title>
</head>
<body>
	<form action="UserServlet" method="post">
		<label>用户名称:</label>
		<input value="${cookie.username.value }" class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" />
		<br />
		<br />
		<label>用户密码:</label>
		<input value="${cookie.cookiePwd.value }" class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" />
		<br />
		<br />
		记住密码:<input type="checkbox" name="rp" value="rp"><br>
		<input type="submit" value="登录" id="sub_btn" />
	</form>
</body>
</html>
<%@page import="java.util.UUID"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>尚硅谷会员登录页面</title>
</head>
<body>
	<%
		String uuid = UUID.randomUUID().toString().replace("-", "");
		session.setAttribute("uuid", uuid);
	%>
	<form action="ReSubServlet" method="post">
		<input type="hidden" value="<%=uuid %>" name="uuid2">
		<label>用户名称:</label>
		<input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" />
		<br />
		<br />
		<label>用户密码:</label>
		<input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" />
		<br />
		<br />
		<input type="submit" value="登录" id="sub_btn" />
	</form>
</body>
</html>

 

转载于:https://my.oschina.net/architectliuyuanyuan/blog/3057916

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值