Cookie
来源:互联网 发布:程序员为什么叫程序猿 编辑:程序博客网 时间:2024/06/16 04:49
Cookie和Session
1.业务场景
- 在登录时要记录账号
- 在查询等功能页面上显示此账号
2.错误的解决方案
1)使用request记录账号
- 登录是一个请求,使用一个reqeust
- 查询是另一个请求,使用另一个request
不同的请求无法通过request共享数据
2)使用config记录账号
- 开发项目时可能采用多个Servlet处理不同的请求
- 可能登录是一个Servlet,它使用一个config
- 可能查询是另一个Servlet,它使用另一个config
不同的Servlet无法通过config共享数据
3)使用context记录账号
- 浏览器和服务器是多对一的关系
- 服务器会给每个项目只创建唯一的context
- 多个浏览器都向这个对象中存数据,其key有冲突
使用一个对象无法给多个浏览器存储名称相同的数据
3.正确的解决方案
- 使用cookie或session存储数据
- 数据可以在多个请求之间共用
- 数据可以在多个Servlet之间共用
- 服务器会给每个浏览器创建一份cookie/session
上述3点由服务器保障
4.它们的区别
- cookie存储在浏览器上,服务器压力小,但数据不安全
- session存储在服务器上,服务器压力大,但数据安全
5.使用建议
- 重要的数据存入session
- 其他的数据存入cookie
Cookie
1.案例
2.归纳
2.1基本语法
- 如何创建cookie
- 如何获取cookie
- 如何修改cookie
2.2扩展点
- 如何修改生存时间
- 如何存中文
- 如何修改有效路径
四.Session
1.案例
代码如下:
Cookie:
package web;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 登陆检查,判断帐号密码是否正确 * 相当于NETCTOSS中的MainServlet.login() * */public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {//接收参数(帐号密码)String code = req.getParameter("code");//检查通过后将帐号存入cookie//每个cookie对象只能存一条数据,包括key和value,都是字符串Cookie c1 = new Cookie("code", code);//声明Cookie的生存时间,默认<0,存yu内存,浏览器关闭则删除//>0,Cookie保存在客户端的硬盘上,时间过期后删除//=0,Cookie被浏览器删除c1.setMaxAge(6000);//设置cookie的有效路径c1.setPath(req.getContextPath());//或者c1.setPath("/jsp2")//将cookie发送给浏览器.浏览器会自动保存res.addCookie(c1);//创建Cookie存入中文Cookie c2 = new Cookie("city",URLEncoder.encode("北京", "utf-8"));res.addCookie(c2);}}
package web;import java.io.IOException;import java.io.PrintWriter;import java.net.URLDecoder;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 模拟打开主页功能 * 相当于NETCTOSS中的MainServlet.toIndex() * */public class IndexServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {//向浏览器输出主页的内容(略)//获取cookieCookie[] cs = req.getCookies();//将他们输出给浏览器if(cs != null){res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();for(Cookie c : cs){out.println(c.getName()+":"+URLDecoder.decode(c.getValue(), "utf-8"));}out.close();}}}
package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 模拟查询资费 * 相当于NETCTOSS中的MainServlet.findCost() */public class FindCostServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {//模拟查询资费(略)//获取cookie中的帐号,并将其输出Cookie[] cs = req.getCookies();if(cs != null){res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();for(Cookie c : cs){out.println(c.getName()+":"+c.getValue());}out.close();}}}配置文件:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>jsp2</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 登录 --> <servlet> <servlet-name>login</servlet-name> <servlet-class>web.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/main/login</url-pattern> </servlet-mapping> <!-- 主页 --> <servlet> <servlet-name>index</servlet-name> <servlet-class>web.IndexServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>index</servlet-name> <url-pattern>/main/index</url-pattern> </servlet-mapping> <!-- 查询 --> <servlet> <servlet-name>findCost</servlet-name> <servlet-class>web.FindCostServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>findCost</servlet-name> <url-pattern>/cost/find</url-pattern> </servlet-mapping></web-app>输入请求路径:http://localhost:8080/jsp2/main/login?code=caocao
再输入:city:北京 code:caocao
则网页显示 city:北京 code:caocao
再输入:http://localhost:8080/jsp2/cost/find
则网页显示 code:caocao
----------------------------------------------------------------------------------------------------------------------------------------------------------------
session:
package web;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;public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {//接收帐号String code = req.getParameter("code");//存入session//session是存储在服务器上的对象,可以存储任意类型的数据HttpSession session = req.getSession();session.setAttribute("code", code);//响应时会自动创建cookie,将session的ID通过cookie发送发给浏览器}}
package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class IndexServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {HttpSession session = req.getSession();String code = (String)session.getAttribute("code");//由于本次请求浏览器传入了ID,服务器就根据此ID找到之前存入的session对象res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();out.println("code:"+code);out.close();} }配置文件:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>jsp3</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>login</servlet-name> <servlet-class>web.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/main/login</url-pattern> </servlet-mapping> <servlet> <servlet-name>index</servlet-name> <servlet-class>web.IndexServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>index</servlet-name> <url-pattern>/main/index</url-pattern> </servlet-mapping> <session-config> <session-timeout>1</session-timeout> </session-config> </web-app>输入请求路径:http://localhost:8080/jsp3/main/login?code=zhangsan
再输入:http://localhost:8080/jsp3/main/index
网页显示 code:zhangsan
若过两三分钟刷新页面后code:null 此时session超时
阅读全文
0 0
- Cookie
- cookie
- cookie
- Cookie
- cookie
- Cookie
- cookie
- Cookie
- Cookie
- Cookie
- cookie
- cookie
- cookie
- Cookie
- cookie
- Cookie
- cookie
- cookie
- java 常见错误合集
- HTML文档中的图像格式
- Vue的组件
- 大数据与Hadoop生态系统
- 5.22
- Cookie
- Atom工具总结笔记
- ListView下拉刷新和上拉加载原理
- mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案
- JDBC-mysql,查询数据库信息
- centos 小插曲
- c++常用头文件
- 快速排序
- 一次关闭所有Activity方法探讨