<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          Session原理,生命周期 您所在的位置:網(wǎng)站首頁(yè) 屬雞男93年性格分析 Session原理,生命周期

          Session原理,生命周期

          2025-07-18 11:51| 來(lái)源: 網(wǎng)絡(luò)整理| 查看: 265

          在WEB開發(fā)中,服務(wù)器可以為每個(gè)用戶瀏覽器創(chuàng)建一個(gè)會(huì)話對(duì)象(session對(duì)象),注意:一個(gè)瀏覽器獨(dú)占一個(gè)session對(duì)象(默認(rèn)情況下)。因此,在需要保存用戶數(shù)據(jù)(保存該瀏覽器(會(huì)話)的相關(guān)信息)時(shí),服務(wù)器程序可以把用戶數(shù)據(jù)寫到用戶瀏覽器獨(dú)占的session中,當(dāng)用戶使用瀏覽器訪問(wèn)其它程序時(shí),其它程序可以從用戶的session中取出該用戶的數(shù)據(jù),為用戶服務(wù)。

          Session和Cookie的主要區(qū)別在于:

          Cookie是把用戶的數(shù)據(jù)寫給用戶的瀏覽器。 Session技術(shù)把用戶的數(shù)據(jù)寫到用戶獨(dú)占的session中(服務(wù)器端)。 Cookie由于存在客戶端,存在安全問(wèn)題,每次使用cookie都會(huì)在本地生成一個(gè)cookie文件 Session將數(shù)據(jù)存在服務(wù)器端,數(shù)據(jù)更加安全 Session將數(shù)據(jù)保存在服務(wù)器端,占用服務(wù)器資源,Cookie不會(huì)占用服務(wù)器的資源

          Session對(duì)象由服務(wù)器創(chuàng)建,開發(fā)人員可以調(diào)用request對(duì)象的getSession方法得到session對(duì)象。

          例如:京東購(gòu)物車信息保存Cookie 、淘寶購(gòu)物車信息保存Session

          ?

          ?

          session對(duì)象:創(chuàng)建

          HttpSession httpsession = request.getSession();

          ?

          存儲(chǔ)session

          httpsession.setAttribute(name,object);

          ?

          對(duì)于上述圖例的實(shí)現(xiàn),用IE6保存session數(shù)據(jù),當(dāng)前瀏覽器可以獲得,但是第二個(gè)IE6 無(wú)法獲得第一個(gè)瀏覽器保存Session 數(shù)據(jù),IE8以上 或 火狐瀏覽器:當(dāng)打開多個(gè)瀏覽器窗口,之間Session共享

          原因:IE6 cookie 中保存jsessionId 默認(rèn)會(huì)話級(jí)別 ;IE8或者火狐 保存cookie中 jsessionId 默認(rèn)持久cookie

          (一)Session實(shí)現(xiàn)原理

          ?

          因此,若果將session id 持久化 ,IE6也可以實(shí)現(xiàn)上述功能。其中的Session Id 可以通過(guò)Session.getId()方法獲得(Session保存數(shù)據(jù)依賴于cookie來(lái)進(jìn)行實(shí)現(xiàn))。

          將寫回給 瀏覽器 JSESSIONID 持久化(手動(dòng))

          Cookie cookie = new Cookie("JSESSIONID",httpSession.getId()); cookie.setMaxAge(60 * 60); cookie.setPath("/history"); response.addCookie(cookie);

          因此,一般我們不允許用戶禁用cookie,如果意外遇到這種情況可以:

          禁用cookie解決方案

          ?

          解決辦法:URL重寫 第二次訪問(wèn)服務(wù)器會(huì)帶一個(gè)URL,由于不能通過(guò)cookie方式傳遞SessionId,所以需要在URL中攜帶SessionId,例如:

          http://localhost:8080/shopping/readsession;jsessionid=xxx

          ?

          注意:攜帶SessionId信息是使用分號(hào)“;”而不是問(wèn)號(hào)“?”

          因此在writesession中添加如下即可:

          String url = "/shopping/readsession"; // 對(duì)url 進(jìn)行重寫 拼接 jsessionid url = response.encodeURL(url); response.getWriter().println("查看保存內(nèi)容");

          問(wèn)題1:如果客戶端關(guān)閉瀏覽器,是否就刪除了Session ? 沒(méi)有,Session保存在服務(wù)器端

          問(wèn)題2:IE6 保存Session,關(guān)閉瀏覽器,再次打開,數(shù)據(jù)丟失了? IE6默認(rèn)jsessionId保存會(huì)話Cookie中,關(guān)閉瀏覽器,會(huì)話cookie就會(huì)被刪除,客戶端丟失jsessionid 無(wú)法找到服務(wù)器對(duì)應(yīng)Session對(duì)象

          服務(wù)器Session對(duì)象還存在

          (二)生命周期 Cookie生命周期:

          創(chuàng)建 Cookie cookie = new Cookie(); response.addCookie(); 銷毀 會(huì)話cookie會(huì)在瀏覽器關(guān)閉時(shí)銷毀,持久cookie在cookie過(guò)期(MaxAge)后銷毀

          Session生命周期

          ?

            創(chuàng)建:

            HttpSession httpsession = request.getSession();創(chuàng)建session

            銷毀 (例如,銷毀session即清空了購(gòu)物車)

            (1)服務(wù)器關(guān)閉時(shí)銷毀?

            (2) 手動(dòng)調(diào)用session.invalidate (可以設(shè)置一個(gè)按鈕(href實(shí)現(xiàn)),點(diǎn)擊實(shí)現(xiàn)購(gòu)物車的清空)

            request.getSession.invalidate();   response.sendRedirect("shopping/session/demo/cart.jsp");//重定向回購(gòu)物車界面

            (3)Session過(guò)期時(shí)銷毀,設(shè)置session過(guò)期的方法:?

          1、配置web.xml

          30

          ?

          2、調(diào)用session對(duì)象 setMaxInactiveInterval(int interval) 單位是秒

          HttpSession session = request.getSession(); session.setMaxInactiveInterval(60*60); //設(shè)置session過(guò)期時(shí)間1小時(shí)

          ?

          (三)Session的應(yīng)用舉例 Session的一個(gè)常見(jiàn)應(yīng)用就是購(gòu)物車功能的實(shí)現(xiàn):

          ?

          public class BuyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、獲得購(gòu)買商品編號(hào) String id = request.getParameter("id"); // 2、根據(jù)編號(hào) 得到商品名稱,實(shí)際工程是進(jìn)行數(shù)據(jù)庫(kù)查詢 String[] arr = { "冰箱", "洗衣機(jī)", "熱水器", "微波爐", "空調(diào)", "電飯鍋" }; String productName = arr[Integer.parseInt(id) - 1]; // 3、判斷商品名稱是否在購(gòu)物車中 /** *判斷購(gòu)物車是否存在,購(gòu)物車對(duì)象在Session中,因此購(gòu)物車應(yīng)該從 *Session中獲得,通過(guò)購(gòu)物車的名字,假設(shè)名字為“cart” */ Map cart = (Map) request.getSession() .getAttribute("cart"); // 可能返回 null if (cart == null) { // 購(gòu)物車對(duì)象不存在 cart = new HashMap(); } //商品名稱為key if (cart.containsKey(productName)) { // 購(gòu)物車存在該商品 數(shù)量+1 int number = cart.get(productName); cart.put(productName, number + 1); } else { // 商品沒(méi)有在購(gòu)物車中 cart.put(productName, 1); } // 將購(gòu)物車加入session request.getSession().setAttribute("cart", cart); response.setContentType("text/html;"); response.getWriter().println("商品已經(jīng)被加入購(gòu)物車!"); response.getWriter().println( "查看購(gòu)物車"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }


          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 饶河县| 宿松县| 宣化县| 秭归县| 桂平市| 泸州市| 溧阳市| 昭通市| 页游| 冷水江市| 怀远县| 武定县| 游戏| 墨竹工卡县| 广饶县| 温泉县| 交城县| 长兴县| 松溪县| 遂昌县| 定结县| 富平县| 常熟市| 延川县| 建瓯市| 洪洞县| 卓尼县| 广东省| 唐山市| 资中县| 松原市| 泽普县| 平江县| 凤山市| 西平县| 定结县| 吉隆县| 兴仁县| 澜沧| 铁力市| 沂水县| http://444 http://444 http://444 http://444 http://444 http://444