04_web基础(五)之cookie与session
29.Http协议无记忆带来的问题
什么是会话:
可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话。
在一次会话中,可以点击多个超链接,可以看到多张图片,多个样式等,每一个资源都是发送一个请求和响应得到的.
在一次会话中,包含多次请求.
什么是会话跟踪:
HTTP是无状态协议,没有记忆力,不知道哪一个客户端请求了自己,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用户身份。
在一次会话中多次请求共享数据即会话跟踪技术.
需求:实现会话跟踪的解决方案:
解决在一次会话中多个请求不能共享数据的问题.
---------------------------------------------------------------------
解决方案:
1:使用参数机制在多个请求之间传递.
可以完成功能,但是不可行(不安全,在浏览器地址栏暴露了所有信息.)
不安全的注意问题:把信息暴露在地址栏.
解决方案:让信息不显示在浏览器地址栏, 就是Cookie
2:Cookie:
放在请求头中:
3:Session:
什么是会话:
可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话。
在一次会话中,可以点击多个超链接,可以看到多张图片,多个样式等,每一个资源都是发送一个请求和响应得到的.
在一次会话中,包含多次请求.
什么是会话跟踪:
HTTP是无状态协议,没有记忆力,不知道哪一个客户端请求了自己,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用户身份。
在一次会话中多次请求共享数据即会话跟踪技术.
需求:实现会话跟踪的解决方案:
解决在一次会话中多个请求不能共享数据的问题.
---------------------------------------------------------------------
解决方案:
1:使用参数机制在多个请求之间传递.
可以完成功能,但是不可行(不安全,在浏览器地址栏暴露了所有信息.)
不安全的注意问题:把信息暴露在地址栏.
解决方案:让信息不显示在浏览器地址栏, 就是Cookie
2:Cookie:
放在请求头中:
3:Session:
30.31.32.cookie
Cookie的操作:
1):创建Cookie和设置共享数据:
Cookie c = new Cookie(String name,String value);
Cookie c = new Cookie("curreentName","wuji");
2):把Cookie放入响应中,把Cookie的共享数据传递给浏览器,由浏览器保存.
response对象.addCookie(c);
3):获取Cookie和Cookie中的数据.(从请求中获取)
4):Cookie的name和value不支持中文.
解决方案:对中文做编码和解码.
//放:
String msg="你好";
String encode = URLEncoder.encode(msg, "UTF-8");
System.out.println(encode);
Cookie c2 = new Cookie("curreentName2",encode);
//取:
String name = cookie.getName();
String value = cookie.getValue();
String decode = URLDecoder.decode(value, "UTF-8");
5):修改Cookie指定名的value值.
方式1: 根据name获取被修改的Cookie对象,在调用setValue方法即可.
方式2: 重新创建一个同名的Cookie.
注意:修改之后,要调用response对象.addCookie(c);
6):Cookie的生命周期:(Cookie中的共享数据可以保留多久)
缺省情况:关闭浏览器Cookie就丢失了.
通过Cookie对象的setMaxAge(int seconds):设置Cookie可以存活多久.
seconds>0:可以存活多少秒.
seconds<0:存放在浏览器进程中,闭浏览器Cookie就丢失了.
seconds=0:删除Cookie.
7):删除Cookie:
Cookie对象.setMaxAge(0);
8):Cookie的缺陷.
1>:中文处理麻烦.
2>:多人共用同一台电脑,信息不安全.
3>:一个Cookie只能存储一个简单类型的数据.
若要同时存储,账号,密码,邮件等等.
主要的原因是:Cookie的value只能存储String,不能存Object.
4>:Cookie的大小和数量限制:
Cookie大小限制在4KB之内;
* 一台服务器在一个客户端最多保存20个Cookie;
* 一个浏览器最多可以保存300个Cookie;
5>:Cookie的原理:把共享数据存储在浏览器中.
每次请求,再把共享数据带到服务端.
代码:
package com.day07.web.demo2.controller; 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;
import java.io.IOException;
import java.io.PrintWriter; /**
* Created by Administrator on 2017/12/7.
*/
@WebServlet("/cookie")
public class CookieServlet extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求乱码处理
req.setCharacterEncoding("utf-8");
//响应乱码处理
resp.setContentType("text/html;charset=UTF-8");
//操作cookie //增加
Cookie cookie1 = new Cookie("name1","wuji1");
resp.addCookie(cookie1);
Cookie cookie2 = new Cookie("name2","wuji2");
resp.addCookie(cookie2);
//删除
/* 6):Cookie的生命周期:(Cookie中的共享数据可以保留多久)
缺省情况:关闭浏览器Cookie就丢失了.
通过Cookie对象的setMaxAge(int seconds):设置Cookie可以存活多久.
seconds>0:可以存活多少秒.
seconds<0:存放在浏览器进程中,闭浏览器Cookie就丢失了.
seconds=0:删除Cookie.
7):删除Cookie:
Cookie对象.setMaxAge(0);*/
cookie1.setMaxAge(0);
//必须 resp.addCookie(cookie); 才可以生效
resp.addCookie(cookie1);
//修改 //查询 //获取输出对象
PrintWriter writer = resp.getWriter();
//输出信息
writer.println("你好师姐!"); }
}
CookieServlet
package com.day07.web.demo2.controller; 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;
import java.io.IOException;
import java.io.PrintWriter; /**
* Created by Administrator on 2017/12/7.
*/
@WebServlet("/cookie2")
public class Cookie2Servlet extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求乱码处理
req.setCharacterEncoding("utf-8");
//响应乱码处理
resp.setContentType("text/html;charset=UTF-8");
//操作cookie //删除
//修改 //查询
Cookie[] cookies = req.getCookies();
for (int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
//取key
String name = cookie.getName();
//取值
String value = cookie.getValue();
//打印
System.out.println(name+"="+value); cookie.setValue("zhaoming");
resp.addCookie(cookie);
} //获取输出对象
PrintWriter writer = resp.getWriter();
//输出信息
writer.println("你好师姐----获取cookie的数据!"); }
}
Cookie2Servlet
33.session简单使用
Session的操作:
1):获取Session对象/创建Session对象.
HttpSession session = request对象.getSession();等同于getSession(true);
HttpSession session = request对象.getSession(true);:如果当前有Session对象,就直接返回,若没有,则先创建一个再返回.
HttpSession session = request对象.getSession(false);:如果当前有Session对象,就直接返回,若没有,则返回null.
2):把共享数据存储在Session中.
Session对象.setAttribute(String name,Object value);
session.setAttribute("currentName","Helloword");
3):从Session中获取共享数据:
Object val = session.getAttribute("currentName");
4):修改Session中的共享数据.
重新设置一个同名的属性名
session.setAttribute("currentName","世界你好!");
5):删除Session中的共享数据.从Session中删除指定名的属性值.
session.removeAttribute( "cuurentName");
6):Session的规范命名:
1):一般,根据我们队大师的研究,发现session中的属性名,习惯起名为:XXX_IN_SESSION.
2):把登陆信息封装在一个对象中,再存储到Session中.
LoginUser user = new LoginUser("无忌",.....);
session.setAttribute("USER_IN_SESSION",user);
7):销毁Session对象(注销登录):
session.removeAttribute("USER_IN_SESSION")方法,只能删除Session中指定名称的属性.
session.invalidate():销毁整个Session对象.
8):Session的超时管理.
session.setMaxInactiveInterval(int seconds);
session.setMaxInactiveInterval(15);若上一次操作之后,15内不再次和该网页交互,则Session会被自动销毁.
两次操作的间隔时间不能超过15秒,若超过自动销毁Session.
一般的,不需要我们去设置,在Tomcat中,默认的超时时间为30分钟(一般在20分钟就被销毁了).
代码:
package com.day07.web.demo2.controller; import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//session 存放数据 位置:服务器 作用范围:整个浏览器
//命名规范 一般,根据我们队大师的研究,发现session中的属性名,习惯起名为:XXX_IN_SESSION.
//怎么存
//先获得session对象
HttpSession session = req.getSession();
session.setAttribute("NAME_IN_SESSION","wuji");
//怎么取
String name =(String) session.getAttribute("NAME_IN_SESSION");
System.out.println("-------name-----"+name);
//怎么修改
session.setAttribute("NAME_IN_SESSION","wuji2");
//怎么删除
session.removeAttribute("NAME_IN_SESSION");
//向页面输出
PrintWriter writer = res.getWriter();
writer.print("================"+name);
}
}
SessionServlet
package com.day07.web.demo2.controller; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
@WebServlet("/session2")
public class Session2Servlet extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//session 存放数据 位置:服务器
//怎么存
//先获得session对象
HttpSession session = req.getSession(); //怎么取
String name =(String) session.getAttribute("name");
System.out.println("-------name-----"+name);
//怎么修改 //怎么删除 //向页面输出
PrintWriter writer = res.getWriter();
writer.print("================"+name);
}
}
Session2Servlet
04_web基础(五)之cookie与session的更多相关文章
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- day 62.3 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...
- day 73 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...
- Django基础六之cookie和session
Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...
- Django基础八之cookie和session
一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...
- 10.Django基础八之cookie和session
一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...
- django(五):cookie和session
一.Cookie 1.cookie机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确 ...
- 【二十五】cookie与session学习总结
一:cookie 1.创建cookie 关键字:setcookie 用于保存cookie 原理:当浏览器访问cookie.php页面时,我们的服务器就会以set-cookie的方式将cookie信息回 ...
- Django框架(十五)-- cookie和session组件
一.cookie 1.cookie的由来 HTTP协议是无状态的.无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直 ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
随机推荐
- mac“打不开身份不明的开发者”
在mac安装软件发现这样的提示 解决方法: 打开系统偏好设置-->安全与隐私-->通用-->选择任何来源 不能选择的话点击按钮锁即可编辑 没有“任何来源”选项(比如我的mac) 打开 ...
- 导航栏 ------ z-index
z-index 显示的层叠关系,数字越大越在上面 <!DOCTYPE html> <html lang="en"> <head> <met ...
- django配置https
1. pip install django-extensions pip install django-werkzeug-debugger-runserver pip install pyOpenSS ...
- java容器思维导图
转载自:https://blog.csdn.net/zbdxcyg/article/details/72330833
- anchor values list
- putty使用秘钥对登录百度云系统全过程
使用秘钥对登录百度云系统全过程 1在百度云生成秘钥对 并且绑定要登录的IP 1)创建 2) 创建成功后,会自动下载私钥到本地 3)绑定 4)绑定完毕 2把下载到本地的私钥使用putty key gen ...
- 54.纯 CSS 创作一副国际象棋
原文地址:https://segmentfault.com/a/1190000015310484 感想:棋盘是 CSS 画的,棋子是 unicode 字符. HTML code: <html&g ...
- C#内存管理和垃圾回收机制
数据类型 垃圾回收机制 一.数据类型 C#中的数据类型分为值类型 (Value type) 和引用类型(reference type), 值 类 型: 所有的值类型都集成自 System.Value ...
- Vue.js——基于$.ajax实现数据的跨域增删查改
转自:https://www.cnblogs.com/keepfool/p/5648674.html 概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是loc ...
- react-native 插件汇总
部分自己搜集 部分 来自别的网站 第三方路由插件 react-native-router-flux react-native-scrollable-tab-view 选项卡 测滑动菜单 react-n ...