Cookie和Session

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

Cookie和Session

会话


  • 什么是会话?
    会话是浏览器和服务器之间的多次请求和响应
    也就是说,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话
  • 有状态会话:一个网站知晓你登陆过、存储了一些基本信息
保存会话的两种技术


  • cookie:

    • 一种客户端技术,服务器响应相关信息给浏览器,保存在浏览器本地

  • session:

    • 服务器技术,保存会话信息到服务器中,把信息和数据放在session中

Cookie

Cookie是一种存储在计算机浏览器目录中的文本文件
一个例子:
  1.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2.         req.setCharacterEncoding("gbk");
  3.         resp.setCharacterEncoding("gbk");
  4.         PrintWriter out = resp.getWriter();
  5.         //cookie 服务器端从客户端取得
  6.         Cookie[] cookies = req.getCookies();//这里返回数组
  7. //        判断cookie是否存在
  8.         if(cookies!=null){
  9.             out.print("你第一次访问的时间是:");
  10.             for (int i = 0; i < cookies.length; i++) {
  11.                 Cookie cookie = cookies[i];
  12.                 //获取cookie的名字
  13.                 if(cookie.getName().equals("LastLoginTime")){
  14. //                    显示最后一次登录的值
  15.                     long l = Long.parseLong(cookie.getValue());
  16.                     Date date = new Date(l);
  17.                     out.write(date.toLocaleString());
  18.                 }
  19.             }
  20.         }else {
  21.             out.print("这是你第一次访问网站");
  22.         }
  23. //        服务器给客户端响应cookie
  24.         Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
  25.         resp.addCookie(cookie);
  26.     }
复制代码
第一次访问:

第二次访问:


  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • cookie大小有限制4kb
  • 300个cookie浏览器上限
删除cookie

  • 不设置有效期,关闭浏览器,自动失效
  • 设置有效期
    1. //        服务器给客户端响应cookie
    2.         Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
    3. //        设置有效期为0
    4.         cookie.setMaxAge(0);
    5.         resp.addCookie(cookie);
    复制代码
如果cookie设置为中文可能会出现乱码:可以通过以下方法解决
  1. URLDecoder.decode(cookie.getValue(),"UTF-8");解码
  2. URLEncoder.encode("啊","utf-8");编码
复制代码
Session


  • 服务器会给每一个用户(浏览器)创建一个session对象
  • 一个Session独占一个浏览器,只要浏览器没关,session就存在
Session和cookie区别:

  • cookie是把用户的数据保存在浏览器
  • session把用户的数据写到用户独占session中,服务器端保存
  • session对象由服务创建
创建场景:

  • 保存一个登录用户的信息
  • 购物车信息
  • 整个网站经常使用的数据
使用例子:
  1.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. //        解决乱码问题
  3.         req.setCharacterEncoding("UTF-8");
  4.         resp.setCharacterEncoding("UTF-8");
  5. //        浏览器显示乱码问题
  6.         resp.setContentType("text/html;charset=utf-8");
  7. //        得到session
  8.         HttpSession session = req.getSession();
  9. //        给session存储东西
  10.         session.setAttribute("name","lihua");
  11. //        获得session的id
  12.         String id = session.getId();
  13. //        判断session是不是新创建的
  14.         if(session.isNew()){
  15.             resp.getWriter().write("session创建成功,id是:"+id);
  16.         }else {
  17.             resp.getWriter().write("session已经在服务器中存在,id是:"+id);
  18.         }
  19.     }
  20. /*session创建的时候创建一个cookie响应回去,键值分别为JSESSIONID,和session的Id,浏览器通过这个判断session是否已经创建,和辨别不同的用户
复制代码
结果:可以看出不同浏览器id不同


另外一些其他方法:
  1. session.removeAttribute("name");//删除键值
  2. session.invalidate();//注销session
  3. //注销后重新生成一个id,相当于重新登录或关闭浏览器
复制代码
也可以在web.xml中设置默认失效时间
  1. <session-config>
  2.    
  3.     <session-timeout>1</session-timeout>
  4. </session-config>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表