文档章节

会话技术-session

遥远的绝响
 遥远的绝响
发布于 2015/11/12 11:07
字数 535
阅读 32
收藏 1

##场景 在WEB开发中,服务器中可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下),当浏览器访问其它程序时,其它程序可以从用户的session中取出该数据,为用户服务。 session和cookie的主要区别在于: cookie技术是把用户的数据写给用户的浏览器 session技术把用户的数据写到用户独占的session中 session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

request.getSession(false) 只获取,不创建

##session的实现原理 ###原理 session是基于cookie的session是一个没有设定maxAge的cookie

输入图片说明

###如何防止关闭浏览器后存储的用户信息被删除 思路:向客户端回写一个名称与session相同的cookie覆盖,并设定maxAge

HttpSession session = request.getSession();
String sessionId = session.getId()
Cookie cookie = new Cookie("JSESSIONID",sessionId);
cookie.setPath(requst.getContextPath());
cookie.setMaxAge(30*60);
session.setAttribute("name","洗衣机");

##session的工作原理 ###用户浏览器禁用cookie的解决方案

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter():
request.getSession();
String url1 = response.encodeURL("/test-web/servlet/sessionDemo1");
String url2 = response.encodeURL("/test-web/servlet/sessionDemo2");
pw.print("<a href='"+url1+"'>购买</a><br/><a href="'" + url2 + "'>收藏</a>");
//response.encodeURL()方法将自动判断浏览器是否禁用cookie,若禁用,则重写URL,后面拼接JSESSIONID

##用session完成简单的购物

public class ListAllServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        HttpSession session = request.getSession();
        PrintWriter pw = response.getWriter();
        pw.print("本网站有如下商品: <br/>");
        Map<Integer, Book> map = Db.getAll();
        Set<Entry<Integer, Book>> entrySet = map.entrySet();
        for (Entry<Integer, Book> entry : entrySet) {
            Book book = entry.getValue();
            String url = response.encodeURL("/test-web/BuyServlet?id=" + book.getId());
            pw.print(book.getName() + "<a href='" + url + "' target=_blank>购买</a><br/>");
        }
        pw.print("当前已经购买了:<br/>");

        List<Book> list = (List<Book>) session.getAttribute("list");
        if (list != null) {
            for (Book book : list) {
                if(book!=null){
                    pw.print(book.getName()+"<br/>");
                }
            }
        }
    }
}

public class BuyServlet extends HttpServlet {
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        Book book = Db.getAll().get(Integer.valueOf(id));
        HttpSession session = request.getSession(false);
        List list = (List) session.getAttribute("list");
        if (list == null) {
            list = new ArrayList<Book>();
        }
        list.add(book);
        session.setAttribute("list", list);
        String url = request.getContextPath() + "/ListAllServlet";
        url = response.encodeRedirectUrl(url);
        response.sendRedirect(url);
        // 此处用rediret 防止刷新再次购买
    }
}

© 著作权归作者所有

遥远的绝响
粉丝 2
博文 23
码字总数 14132
作品 0
昆山
私信 提问
4.会话管理(Session)

1.会话管理的概念和基本原理: 会话管理概念: 会话的实现过程: 2.使用Cookie、隐藏域、URL重写实现会话管理 创建并向客户端发送Cookie; 从客户端读取Cookies Cookie的方法: Cookie的优缺点...

firesun
2018/09/16
0
0
Django之路——8 cookie 和sessions

class HttpResponseBase: login.html:登录页面,提供登录表单; index1.html:主页,显示当前用户名称,如果没有登录,显示您还没登录; index2.html:主页,显示当前用户名称,如果没有登录...

袁勇i
2018/07/05
0
0
次世代的会话管理项目 Spring Session

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,由Tnecesoc编译。 会话管理一直是 Java 企业级应用的重要部分。不过在很长的一段时间里,这一部分都被我...

腾讯云加社区
2018/06/26
0
0
PHP学习10——Cookie和Session技术

主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原理 session控制 session的存储结构 传递sessi...

乌云上
2018/08/08
0
0
企业应用架构模式学习(六):会话状态

业务事务和系统事务的区别引起了选择使用无状态会话还是有状态会话的辩论,最基本的问题应该落到无状态和有状态服务器系统背后的技术问题上。 无状态的价值 当前我们的web系统基本都是无状态...

大风起兮
2013/05/28
230
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
32分钟前
3
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
43分钟前
3
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
52分钟前
6
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部