IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Cookie与Session -> 正文阅读

[网络协议]Cookie与Session

Cookie

1.含义:饼干,其实是一份小数据,是服务器给客户端并且存储在客户端上的一份小数据。
2.应用场景:自动登录、浏览记录、购物车
3.为什么要有Cookie?
http的请求是无状态的,即客户端与浏览器通讯的时候是无状态的,当客户端第二来访时服务器根本就不知道这个客户端以前是否访问过。为了更好的用户体验,更好的交互,再者公司为了更好的收集用户的习惯发明了Cookie。
4.什么时候有Cookie?
resp.addCookie(new Cookie())
5.Cookie分类:1)会话Cookie——关闭浏览器,就失效;2)持久Cookie——在指定的期限内有效,并且持续保存在客户端上。cookie.setMaxAge(0);//设置立即删除|cookie.setMaxAge(100);//100秒
6.Cookie怎么用?

//1.在响应的时候,添加cookie
Cookie cookie = new cookie(“aa”, "bb");
//给响应添加一个cookie
resp.addCookie(cookie);//给客户端收到的信息里面,响应头中多一个字段set-cookie:aa=bb
//2.获取客户端带过来的Cookie
Cookie [] cookies = req.getCookies();
if(cookies != null){
	for(Cookie c:cookies){
		String cookieName = c.getName();
		String cookieValue = c.getValue();
		System.out.println(cookieName + " = " + cookieValue);
	}
}

7.创建对象的几种方法:1)直接new;2)单例模式|提供静态方法;3)工厂模式构建stuFactory、stuBuilder
8.例子:显示最近访问的时间
先在另一个类中定义一个静态函数

public static Cookie findCookie(Cookie[] cookies, String name){
	if(cookies != null){
		for(Cookie cookie:cookies){
			if(name.equals(cookie.getName())){
				return cookie;
			}
		}
	}
	return null;
}

再进行时间的获取

protected void doGet(HttpServletRequest req, HttpServletResponse  resp) throws ServletException, IOException{
	resp.setContentType("text/html;charset=utf-8");
	
	//1.判断账号是否正确
	String userName = req.getParamter("username");
	String passWord = req.getParamter("password");
	//2.如果正确,则获得cookie。但是得到的cookie是一个数组,要从数组里面找到想要的对象
	if("admin".equals(userName) && "123".equals(passWord)){
		Cookies[] cookies = req.getCookies();
		//从数组里里面找到想要的cookie
		Cookie cookie = CookieUtil.findCookie(cookies, "lasttime");
		//是第一次登录没有cookie,那么要添加cookie
		if(cookies == null){
			Cookie c = new Cookie("lasttime", System.currentTimeMillis()+" ");
			c.setMaxAge(60*60);//一个小时
			resp.addCookie(c);
			response.getWriter().write("欢迎您, "+userName);
		}else{
			//取以前的cookie
			long lastVisitTime = Long.parseLong(cookie.getValue());
			//输出到界面
			resp.getWriter().write("欢迎您,"  + userName +,上次你来访的时间是:” + new Date(lastVisitTime) + " ");
			//重置登录时间
			cookie.setValue(System.currentTimeMillis()+" ");
			resp.addCookie(cookie);
  	 }else{
		resp.getWriter().write(“登录失败!”);
		}
}

Session

1.含义:会话,基于Cookie的一种会话机制。由于Cookie将数据保存在客户端上,同时Cookie的大小与个数有限制,因此存在安全隐患的问题。Cookie是服务器返回一小部分数据给客户端,并且放在客户端上,而Session是数据存放在服务器端的。
2.创建:在servlet里调用req.getSession().
3.销毁:1)关闭服务器时;2)Session会话时间过期,有效期过了时,默认有效期为30分钟。
session是存放在服务器内存的一份数据,当然也可以使用redis持久化。即使关闭了浏览器,session也不会销毁。
4.例子:购物车

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	resp.setContentType("text/html:charset=utf-8");
	//1.获取要添加到购物车的商品id
	int id = Integer.parseInt(req.getParameter("id"));//0-1-2-3-4
	String[] names = {"Vivo x5", "小米6", "三星Note8","华为Note40", "魅族7"}//获取id对应的商品名称
	String name = names[id];

	//2.获取购物车存放东西的session Map<String, Integer>
	//把一个map对象存放到session里面去,并保证只存放一次
	Map<String, Integer> map = (Map<String, Integer>)req.getSession.getAttribution();
	//session里面没有存放过任何东西
	if(map == null){
		map = new LinkedHashMap<String, Integer>();
		req.getSession().setAttribute("cart", map);
	}
	//3.判断购物车里面有没有该商品
	if(map.containsKey(name)){
		//在原来的值基础上+1
		map.put(name, map.get(name)+1);
	}else{
		//没有购买过该商品,当前数量为1
		map.put(name,1);
	}
	//4.输出界面(跳转)
	resp.getWriter.write("<a href="product_list.jsp"><h3>继续购物</h3></a>");
	resp.getWriter.write("<a href="cart.jsp"><h3>去购物车结算</h3></a>");
}

5.常用API:getSession()获取会话id;invalidate()强制关闭会话;seAttribute()添加指定对象到session中;getAttribute()获取对象;removeAttribute()删除session中指定的对象。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:23:21  更:2021-09-05 11:24:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:35:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码