欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb詳細(xì)講述Cookie和Session的概念

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

1.會(huì)話

會(huì)話: 用戶打開(kāi)了一個(gè)瀏覽器,點(diǎn)擊了很多超鏈接,訪問(wèn)多個(gè)web次元,關(guān)閉瀏覽器,這個(gè)過(guò)程可以稱之為會(huì)話

有狀態(tài)會(huì)話: 帶有訪問(wèn)記錄的會(huì)話

1.服務(wù)端會(huì)給客戶端一個(gè)cookie,客戶端下次訪問(wèn)時(shí)攜帶cookie訪問(wèn)就可以了 cookie

2.服務(wù)端登記客戶端訪問(wèn)過(guò),下次訪問(wèn)時(shí)匹配到客戶端; session

2.保存會(huì)話的兩種技術(shù)

  • cookie

客戶端技術(shù)(響應(yīng),請(qǐng)求)

  • session

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

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

3.Cookie

1.從請(qǐng)求中拿到cookie信息

2.服務(wù)器響應(yīng)給客戶端cookie

cookie相關(guān)方法:

Cookie[] cookies = req.getCookies(); //獲得cookie
cookie.getName() //獲得cookie中的鍵
cookie.getValue() //獲得cookie中的值	
new Cookie("LastLoginTime",System.currentTimeMillis()+"") //新建一個(gè)cookie
cookie.setMaxAge(24*60*60); //設(shè)置cookie有效期
resp.addCookie(cookie); //響應(yīng)給客戶端一個(gè)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èn)網(wǎng)站");
    }else{
        out.write("您上一次訪問(wèn)的時(shí)間是:");
        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()+"");
    //設(shè)置cookie有效期為一天
    cookie.setMaxAge(24*60*60);
    resp.addCookie(cookie);
}

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

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

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

刪除cookie:

  • 不設(shè)置有效期,關(guān)閉瀏覽器,自動(dòng)失效;
  • 設(shè)置有效期時(shí)間為0;

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

4.Session

什么事session:

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

Session常用的方法

Session和cookie的區(qū)別:

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

使用場(chǎng)景:

  • 保存一個(gè)登錄用戶的信息;
  • 購(gòu)物車(chē)信息;
  • 在整個(gè)網(wǎng)站中經(jīng)常會(huì)使用的數(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)建的時(shí)候做了什么事
    //        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();

會(huì)話自動(dòng)過(guò)期:web.xml配置

<!--    設(shè)置Session的默認(rèn)失效時(shí)間-->
    <session-config>
<!--        15分鐘后session自動(dòng)失效,以分鐘為單位-->
        <session-timeout>15</session-timeout>
    </session-config>

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

相關(guān)文章

  • Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解

    Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解

    這篇文章主要介紹了Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringCloud?Feign超詳細(xì)講解

    SpringCloud?Feign超詳細(xì)講解

    Feign是Netflix公司開(kāi)發(fā)的一個(gè)聲明式的REST調(diào)用客戶端;?Ribbon負(fù)載均衡、?Hystrⅸ服務(wù)熔斷是我們Spring?Cloud中進(jìn)行微服務(wù)開(kāi)發(fā)非?;A(chǔ)的組件,在使用的過(guò)程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • Java的Atomic原子類詳解

    Java的Atomic原子類詳解

    這篇文章主要介紹了Java的Atomic原子類詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java代碼實(shí)踐12306售票算法(二)

    Java代碼實(shí)踐12306售票算法(二)

    這篇文章主要介紹了Java代碼實(shí)踐12306售票算法(二)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java打包Jar包后使用腳本執(zhí)行

    Java打包Jar包后使用腳本執(zhí)行

    本文詳細(xì)講解了Java打包Jar包后使用腳本執(zhí)行的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • SpringData JPA中查詢接口Repository的使用

    SpringData JPA中查詢接口Repository的使用

    本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在解決辦法

    Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在解決辦法

    建完springboot項(xiàng)目時(shí),點(diǎn)擊啟動(dòng),有可能會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在的解決辦法,需要的朋友可以參考下
    2024-02-02
  • SpringBoot項(xiàng)目接入Nacos的實(shí)現(xiàn)步驟

    SpringBoot項(xiàng)目接入Nacos的實(shí)現(xiàn)步驟

    SpringBoot項(xiàng)目使用nacos作為配置中心和服務(wù)注冊(cè)中心,同時(shí)兼容dubbo的注冊(cè)中心。 本Demo項(xiàng)目使用的SpringBoot版本是2.3.9.RELEASE
    2021-05-05
  • 深入了解Java內(nèi)部類的用法

    深入了解Java內(nèi)部類的用法

    java類的五大成員:屬性,方法,構(gòu)造器(構(gòu)造方法),代碼塊,內(nèi)部類。本文就來(lái)和大家詳細(xì)講講ava內(nèi)部類的用法,需要的小伙伴可以參考一下
    2022-07-07
  • Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    這篇文章主要介紹了Java List Object[]轉(zhuǎn)換成List T的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論