javaee之cookie和session的见解和练习
来源:互联网 发布:匡恩网络 知乎 编辑:程序博客网 时间:2024/06/05 20:39
Cookie类: 用于管理会话数据的
创建Cookie对象,用于存放会话数据
Cookie c = new Cookie("name","value")
把cookie发送给浏览器保存
response.addCookie(c);
服务器接收浏览器返回的cookie数据
Cookie[] cs = request.getCookies()
Cookie类的属性:
name: cookie的名称,用于获取cookie
value: cookie的值,用于存储会话数据
path: cookie的存储路径,存储路径决定浏览器是否携带cookie数据访问服务器
默认值:当前web应用路径
maxAge: cookie在浏览器保存的最长时间。默认值为负数
负数:代表cookie保存在浏览器的缓存内存,浏览器关闭cookie丢失!
正数: 代表cookie保存在浏览器的缓存文件,浏览器关闭cookie不会 丢失,而是在到达过期时间才会丢失!
零:代表用于删除同路径同名的cookie一、关于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;public class cookiedemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//创建一个cookie对象Cookie cookie = new Cookie("product","tv");//修改cookie的路径cookie.setPath("/xxx");//修改cookie的缓存时间cookie.setMaxAge(1*60*60); //缓存一个小时//发送给浏览器response.addCookie(cookie);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
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;public class cookiedemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie[] cs = request.getCookies();if(cs != null){for(Cookie c : cs){System.out.println(c.getName() + "==" + c.getValue());}}else{System.out.println("没有缓存");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
二、关于cookie的用户上次访问时间
import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class cookiedemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//格式化时间SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String curtime = simple.format(new Date());//得到cookie数据Cookie[] cookies = request.getCookies();String time = null;if(cookies != null){for(Cookie c : cookies){if(c.getName().equals("time")){time = c.getValue();response.getWriter().write("您上次访问的时间" + time);//更新cookie的时间c.setValue(curtime);response.addCookie(c);}}}//如果是第一次访问则创建cookieif(cookies == null || time ==null ){response.getWriter().write("你是首次访问:" + curtime );Cookie cookie = new Cookie("time",curtime);response.addCookie(cookie);}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
HttpSession开发步骤
HttpSession类:用于保存会话数据的
创建一个HttpSession对象,用来保存数据
HttpSession session =request.getSession()
把会话数据保存到HttpSession对象中
session.setAttribute("name",Object);
从HttpSession对象取出会话数据
Object value = session.getAttribute("name");
session的管理原理
第一次访问服务器的时候,服务器会为这个浏览器分配一个HttpSession对象,返回一个该HtppSession对象的标记(JSESSIONID)(通过cookie响应头:set=cookie)
浏览器在下次访问服务器的时候,携带这个session标记(JSESSIONID)(通过cookie的请求头:cookie)
session的销毁时机:(关闭浏览器不会销毁HttpSession对象的)
1、默认情况下,30分钟后服务器自动回收( 从最后一次访问开始算 )
2、手动修改session销毁时机:
setMaxInactiveInterval
(int interval)
(单位:秒)
3、全站的所有session销毁时机:
4、 直接销毁session: invalidate()
一、关于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;public class sessiondemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");String product = request.getParameter("product");HttpSession session = request.getSession();System.out.println("session的标记:" + session.getId());session.setMaxInactiveInterval(20);session.setAttribute("product", product);response.getWriter().write(product + "已经加入购物车了<a href='"+request.getContextPath()+"/sessiondemo2'>查看购物车</a>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
二、得到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;public class sessiondemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");HttpSession session = request.getSession();String product = (String) session.getAttribute("product");response.getWriter().write("当前购物车有" + product);session.invalidate();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
关于cookie和session的区别:
cookie特点:
1)cookie保存字符串数据
2) 一个cookie数据不能超过4KB,一个web应用不能超过20个cookie,一个浏览器最多300个cookie
3)保存到cookie的数据相对不安全的
session特点:
HttpSession的生命周期:
创建: request.getSession()
销毁:以上四种情况
钝化(序列化):关闭服务器(把内存的HttpSession数据保存到了硬盘)
- javaee之cookie和session的见解和练习
- javaee(cookie和session)
- 【JavaEE】cookie和Session
- 关于Session和cookie个人见解
- cookie、localStorage和session的小练习
- JavaEE——Session与Cookie的区别和联系
- javaee之jsp和Servlet的练习
- javaee之session的购物车练习
- cookie和session之自己的理解
- javaee之sax解析和schema约束见解
- javaee之xml和dtd的基础练习
- javaee之request和response的详细练习
- PHP cookie和session的分析之cookie篇1
- PHP cookie和session的分析之session篇2
- tomcat之session和cookie
- Java之cookie和session
- Java之cookie和session
- servlet之session和cookie
- 去除listView的分割线
- 几种进程间的通信方式
- jsp
- 过滤器
- LeetCode:Invert Binary Tree
- javaee之cookie和session的见解和练习
- 【Codeforces 贪心】Far Relative’s Problem
- C++ 与 C语言 之间的区别
- 稀疏矩阵的压缩存储和逆置,以及快速逆置,以及稀疏矩阵的加法
- HDU 1667 百练 1288 POJ 2286
- 2016ACM暑假集训 - 4 Values whose Sum is 0
- 版本控制(link)
- CodeForces 604AUncowed Forces (模拟 oj 评分)
- LeetCode:Best Time to Buy and Sell Stock