最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb詳細講述Cookie和Session的概念

 更新時間:2022年06月30日 08:37:19   作者:Dragon_qing  
web開發(fā)階段我們主要是瀏覽器和服務器之間來進行交互。瀏覽器和服務器之間的交互就像人和人之間進行交流一樣,但是對于機器來說,在一次請求之間只是會攜帶著本次請求的數(shù)據(jù)的,但是可能多次請求之間是會有聯(lián)系的,所以提供了會話機制

1.會話

會話: 用戶打開了一個瀏覽器,點擊了很多超鏈接,訪問多個web次元,關閉瀏覽器,這個過程可以稱之為會話

有狀態(tài)會話: 帶有訪問記錄的會話

1.服務端會給客戶端一個cookie,客戶端下次訪問時攜帶cookie訪問就可以了 cookie

2.服務端登記客戶端訪問過,下次訪問時匹配到客戶端; session

2.保存會話的兩種技術

  • cookie

客戶端技術(響應,請求)

  • session

服務器技術,利用這個技術,可以保存用戶的會話信息,可以把信息或者數(shù)據(jù)保存在Session中。

常見場景:網(wǎng)站登錄之后,下次不用再登錄了,第二次訪問直接就上去了!

3.Cookie

1.從請求中拿到cookie信息

2.服務器響應給客戶端cookie

cookie相關方法:

Cookie[] cookies = req.getCookies(); //獲得cookie
cookie.getName() //獲得cookie中的鍵
cookie.getValue() //獲得cookie中的值	
new Cookie("LastLoginTime",System.currentTimeMillis()+"") //新建一個cookie
cookie.setMaxAge(24*60*60); //設置cookie有效期
resp.addCookie(cookie); //響應給客戶端一個cookie

案例:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //解決中文亂碼
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html; charset=utf-8");
    PrintWriter out = resp.getWriter();
    Cookie[] cookies = req.getCookies();
    //判斷cookie是否存在
    if(cookies == null){
        out.println("第一次訪問網(wǎng)站");
    }else{
        out.write("您上一次訪問的時間是:");
        for (Cookie cookie : cookies) {
            if("LastLoginTime".equals(cookie.getName())){
                //獲取cookie中的值
                long time = Long.parseLong(cookie.getValue());
                Date date = new Date(time);
                DateFormat dfd = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
                DateFormat dft = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);
                out.write(dfd.format(date)+dft.format(date));
            }
        }
    }
    Cookie cookie = new Cookie("LastLoginTime",System.currentTimeMillis()+"");
    //設置cookie有效期為一天
    cookie.setMaxAge(24*60*60);
    resp.addCookie(cookie);
}

cookie:一般會保存在本地的用戶目錄下appdate;

一個網(wǎng)站cookie是否存在上限?

  • 一個cookie只能保存一個信息;
  • 一個web網(wǎng)站可以給瀏覽器發(fā)送多個cookie,最多存放20個cookie;
  • cookie大小有限制4kb
  • 300個cookie瀏覽器上限

刪除cookie:

  • 不設置有效期,關閉瀏覽器,自動失效;
  • 設置有效期時間為0;

注意:在cookie的值為中文時最好使用URLEncoder.encode()來進行編碼,防止中文亂碼。取值時用URLDecoder.decode()來解碼。

4.Session

什么事session:

  • 服務器會給每一個用戶創(chuàng)建一個session對象
  • 一個session獨占一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在;
  • 用戶登錄之后,整個網(wǎng)站都可以訪問 -->保存用戶的信息;

Session常用的方法

Session和cookie的區(qū)別:

  • Cookie是把用戶的數(shù)據(jù)寫到用戶的瀏覽器,瀏覽器保存(可以保存多個)
  • session把用戶的數(shù)據(jù)寫到用戶獨占的Session中,服務器端保存(保存重要的信息,減少服務器資源的浪費)
  • session對象由服務器創(chuàng)建;

使用場景:

  • 保存一個登錄用戶的信息;
  • 購物車信息;
  • 在整個網(wǎng)站中經(jīng)常會使用的數(shù)據(jù),我們將它保存到Session中;

使用session:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //解決亂碼
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html; charset=utf-8");
    PrintWriter out = resp.getWriter();
    //得到Session
    HttpSession session = req.getSession();
    //給session中存東西
    session.setAttribute("name",new Person("張三",18));
    //獲取session的id
    String id = session.getId();
    //判斷session是不是新創(chuàng)建的
    if(session.isNew()){
        out.write("session創(chuàng)建成功,ID:"+id);
    }else{
        out.write("session已經(jīng)存在,id:"+id);
    }
    //Session創(chuàng)建的時候做了什么事
    //        Cookie jsessionid = new Cookie("JSESSIONID", id);
    //        resp.addCookie(jsessionid);
}
//Person類
public class Person {
    private String name;
    private int age;
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

獲取session中的信息

//得到Session
HttpSession session = req.getSession();
Person name = (Person) session.getAttribute("name");
System.out.println(name);

注銷session

//得到Session
HttpSession session = req.getSession();
session.removeAttribute("name");
//注銷session
session.invalidate();

會話自動過期:web.xml配置

<!--    設置Session的默認失效時間-->
    <session-config>
<!--        15分鐘后session自動失效,以分鐘為單位-->
        <session-timeout>15</session-timeout>
    </session-config>

到此這篇關于JavaWeb詳細講述Cookie和Session的概念的文章就介紹到這了,更多相關JavaWeb Cookie和Session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Intellij?IDEA如何查看所有斷點

    Intellij?IDEA如何查看所有斷點

    這篇文章主要介紹了Intellij?IDEA如何查看所有斷點問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • sun?unsafe類功能及使用注意事項詳解

    sun?unsafe類功能及使用注意事項詳解

    這篇文章主要為大家介紹了unsafe類的功能及在使用中需要注意的事項詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-01-01
  • Java無界阻塞隊列DelayQueue詳細解析

    Java無界阻塞隊列DelayQueue詳細解析

    這篇文章主要介紹了Java無界阻塞隊列DelayQueue詳細解析,DelayQueue是一個支持時延獲取元素的無界阻塞隊列,隊列使用PriorityQueue來實現(xiàn),隊列中的元素必須實現(xiàn)Delayed接口,在創(chuàng)建元素時可以指定多久才能從隊列中獲取當前元素,需要的朋友可以參考下
    2023-12-12
  • @JsonProperty和@JSONField注解的區(qū)別解析(最新)

    @JsonProperty和@JSONField注解的區(qū)別解析(最新)

    Jackson是一款優(yōu)秀的JSON解析庫,添加了依賴之后就可以使用對應的注解,讓我們能夠自由的將Java對象和JSON做轉換,這篇文章主要介紹了@JsonProperty和@JSONField注解的區(qū)別,需要的朋友可以參考下
    2024-04-04
  • Java中List對象集合按對象中某字段進行排序舉例

    Java中List對象集合按對象中某字段進行排序舉例

    這篇文章主要給大家介紹了關于Java中List對象集合按對象中某字段進行排序的相關資料,我們在日常開發(fā)中也經(jīng)常會用到排序算法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • SpringCloud之loadbalancer負載均衡組件實戰(zhàn)詳解

    SpringCloud之loadbalancer負載均衡組件實戰(zhàn)詳解

    LoadBalancer是Spring Cloud官方提供的負載均衡組件,可用于替代Ribbon,這篇文章主要介紹了SpringCloud之loadbalancer負載均衡組件,需要的朋友可以參考下
    2023-06-06
  • java 學習筆記(入門篇)_java的基礎語法

    java 學習筆記(入門篇)_java的基礎語法

    從基礎語法開始,這個語法你也可以理解為英語或是漢語里面的語法,只不過大家各有各的特點和區(qū)別;那么在學習的過程中我們就要不斷的積累重要的類和方法,這樣寫程序就會方便快捷了,下面就開始學習java的基礎語法
    2013-01-01
  • mybatis insert返回主鍵代碼實例

    mybatis insert返回主鍵代碼實例

    這篇文章主要介紹了mybatis insert返回主鍵代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 在java中用Scanner類讀入單個字符的方法

    在java中用Scanner類讀入單個字符的方法

    今天小編就為大家分享一篇在java中用Scanner類讀入單個字符的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 淺談Java為什么只能單繼承

    淺談Java為什么只能單繼承

    本文主要介紹了Java為什么只能單繼承,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

合山市| 彭山县| 定南县| 唐河县| 会宁县| 桂阳县| 山阳县| 克山县| 江山市| 醴陵市| 尖扎县| 布尔津县| 长寿区| 县级市| 柘城县| 莲花县| 孙吴县| 林口县| 比如县| 湖南省| 淮阳县| 锦州市| 焉耆| 泰和县| 永济市| 莫力| 咸阳市| 海丰县| 嵊泗县| 墨竹工卡县| 阳曲县| 巴青县| 会昌县| 敦煌市| 通河县| 隆子县| 任丘市| 潜江市| 南华县| 上蔡县| 鹤峰县|