1. 程式人生 > >Session的工作原理

Session的工作原理

上一節中,談到了session的工作原理(點選連結到上一節),但實際開發中,使用者可能把cookie禁用了,意味著伺服器向瀏覽器以cookie形式回送session的id號時,瀏覽器不接受這個id,那麼在結賬servlet中就不能再獲取到這個session的id,就會建立一個新的session。
解決:url重寫(點選超連結訪問伺服器時同時傳遞session的id):
在訪問首頁時就建立session,建立session後,在每一個超連結後面都跟上session的id號,伺服器端得到這個id,獲得伺服器裡的session(getSession方法),那麼就要重寫所有的超連結,就是url重寫。
例:
建立一個servlet:WelcomeServlet作為首頁:

package cn.sun.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//網站首頁
@WebServlet("/WelcomeSession") public class WelcomeSession extends HttpServlet { private static final long serialVersionUID = 1L; public WelcomeSession() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"
); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); request.getSession(); //建立session String url1=response.encodeURL("/day07/SessionDemo1"); //該方法實現url重寫,會自動在這個url地址後面加上session的id號 String url2=response.encodeURL("/day07/SessionDemo2"); //輸出超連結 out.print("<a href='"+url1+"'>購買</a> "); out.print("<a href='"+url2+"'>結賬</a>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }

SessionDemo1:

package cn.sun.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//購買Servlet
@WebServlet("/SessionDemo1")
public class SessionDemo1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SessionDemo1() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(); //得到使用者的session

        //為cookie設定有效期
        String sessionid=session.getId();  //得到session的ID
        Cookie cookie=new Cookie("JSESSIONID",sessionid); //回寫一個與伺服器回寫的cookie同名的cookie,將其覆蓋(就是覆蓋伺服器回寫的cookie)。注:伺服器回寫的session的名稱叫JSESSIONID
        cookie.setPath("/day07");  //設定相同的path將其覆蓋 
        cookie.setMaxAge(30*60);   //設定有效期為30分鐘
        response.addCookie(cookie);  //回寫session

        session.setAttribute("name", "洗衣機"); //儲存使用者購買的物品        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}

SessionDemo2:

package cn.sun.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//結賬servlet
@WebServlet("/SessionDemo2")
public class SessionDemo2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SessionDemo2() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");     
        PrintWriter out=response.getWriter();

        HttpSession session = request.getSession();  //得到來訪者的session
        String product = (String) session.getAttribute("name");  //得到使用者購買的產品

        out.write("您購買的商品是:"+product);      
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}

執行WelcomeServlet:
這裡寫圖片描述
點選購買,再點選結賬:
這裡寫圖片描述

相關推薦

描述Cookie和Session的作用,區別和各自的應用範圍,Session工作原理

Session用於儲存每個使用者的專用資訊. 每個客戶端使用者訪問時,伺服器都為每個使用者分配一個唯一的會話ID(Session ID) . 她的生存期是使用者持續請求時間再加上一段時間(一般是20分鐘左右).Session中的資訊儲存在Web伺服器內容中,儲存

Spring Session工作原理

本文首發於 vivo網際網路技術 微信公眾號 https://mp.weixin.qq.com/s/KCOFv0nRuymk

session rsyns 的工作原理

session rsyns 的工作原理session的工作原理 1.session實現與工作原理瀏覽器和服務器采用http無狀態的通訊,為了保持客戶端的狀態,使用session來達到這個目的。然而服務端是怎麽樣標示不同的客戶端或用戶呢?這裏我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會采

session工作原理

銷毀 這樣的 機制 過期 登陸 處理 art 客戶端瀏覽器 生成 一直在使用session存儲數據,一直沒有好好總結一下session的使用方式以及其工作原理,今天在這裏做一下梳理。這裏的介紹主要是基於php語言,其他的語言操作可能會有差別,但基本的原理不變。 1.在p

[Java]Servlet工作原理之二:Session與Cookie

工作 一段時間 .cn cookie font ava logs mage ont (未完待續) 一、Cookie Cookie 用於記錄用戶在一段時間內的行為,它有兩個版本:Version 0 和 Version 1,分別對應兩種響應頭 Set-Cookie 和 Set-

Session 簡介以及實現與工作原理

Session 是存放在伺服器端的,類似於Session結構來存放使用者資料,當瀏覽器 第一次傳送請求時,伺服器自動生成了一個Session和一個Session ID用來唯一標識這個Session,並將其通過響應傳送到瀏覽器。當瀏覽器第二次傳送請求,會將前一次伺服器響應中的Session

詳細解析Cookie和Session的作用和工作原理,適合新手學習

一、Cookie詳解 (1)簡介 因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼

Cookie和Session工作原理及比較

一、Cookie詳解 (1)簡介   因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底

Cookie與Session工作原理解析

cookie和session大家一定不會陌生,至少大家都會知道cookie與session最簡單的區別:cookie是存在客戶端即瀏覽器端的,session是儲存在伺服器端的。作者最近在實習當中使用到了session和cookie,有一點小感觸,記錄下來與大家一起學習。 1

HTTP Session和Cookie工作原理

session的工作原理 術語session在我的經驗裡,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。 session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/訊息,比如打電話時從拿起電話撥號

Session工作原理詳細講解

Session:Session是個服務端技術,利用這個技術 伺服器在執行時候可以為每一個使用者瀏覽器建立一個獨享的session物件。由於未使用者瀏覽器獨享,所以每一個使用者在訪問伺服器的web資源的時候,可以把給自的session中,當用戶在去訪問伺服器的web資源的時候。其他web資源在從各

Cookie和Session的作用和工作原理

一、Cookie詳解 (1)簡介 因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾

Session工作原理

上一節中,談到了session的工作原理(點選連結到上一節),但實際開發中,使用者可能把cookie禁用了,意味著伺服器向瀏覽器以cookie形式回送session的id號時,瀏覽器不接受這個id,那麼在結賬servlet中就不能再獲取到這個session的id

http相關的session及cookie的工作原理與身份認證

型別選原創是有點慚愧 其實是我看了這篇文章的總結:http://blog.csdn.net/kgd1120/article/details/2159458 寫得很好,就是略長,後面java的httpsession我就沒看了 正題: 經常上98什麼的時候,發現只要不點退出,

描述session的執行機制和工作原理

瀏覽器和伺服器採用http無狀態的通訊,為了保持客戶端的狀態,使用session來達到這個目的。然而服務端是怎麼樣標示不同的客戶端或使用者呢? 這裡我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會採取什麼方式來區分不同的人呢!你可能根據臉型,也有可能根據使用者的名字, 或者人的身份證,即

session實現與工作原理

瀏覽器和伺服器採用http無狀態的通訊,為了保持客戶端的狀態,使用session來達到這個目的。然而服務端是怎麼樣標示不同的客戶端或使用者呢? 這裡我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會採取什麼方式來區分不同的人呢!你可能根據臉型,也有可能根據

SESSION工作原理詳解

在說明session之前 一定要說一下cookie因為這兩個是相輔相成的 COOKIE COOKIE將客戶的資料儲存在客戶端。 COOKIE資料是由伺服器來生成,並傳回到客戶端。下次請求後,將

VMware快照的工作原理

所有 整合 100g 性能 不變 小時 此外 建立 console VMware中的快照是對VMDK在某個時間點的“拷貝”,這個“拷貝”並不是對VMDK文件的復制,而是保持磁盤文件和系統內存在該時間點的狀態,以便在出現故障後虛擬機能夠恢復到該時間點。如果對某個虛擬機創建了多

Vue工作原理小結

key 如何實現 reference 讀寫 owa 方法 cli scrip 枚舉 本文能幫你做什麽?1、了解vue的雙向數據綁定原理以及核心代碼模塊2、緩解好奇心的同時了解如何實現雙向綁定為了便於說明原理與實現,本文相關代碼主要摘自vue源碼, 並進行了簡化改造,相對較

angularjs工作原理解析

body oot 分隔 復制 抖動 修改 重新 接收 裏的 個人覺得,要很好的理解AngularJS的運行機制,才能盡可能避免掉到坑裏面去。在這篇文章中,我將根據網上的資料和自己的理解對AngularJS的在啟動後,每一步都做了些什麽,做一個比較清楚詳細的解析。 首