溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaWeb Cookie和Session的概念是什么

發(fā)布時間:2022-06-30 09:52:27 來源:億速云 閱讀:167 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“JavaWeb Cookie和Session的概念是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JavaWeb Cookie和Session的概念是什么”吧!

1.會話

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

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

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

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

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

  • cookie

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

  • session

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

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

3.Cookie

1.從請求中拿到cookie信息

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

JavaWeb Cookie和Session的概念是什么

cookie相關(guān)方法:

Cookie[] cookies = req.getCookies(); //獲得cookie
cookie.getName() //獲得cookie中的鍵
cookie.getValue() //獲得cookie中的值	
new Cookie("LastLoginTime",System.currentTimeMillis()+"") //新建一個cookie
cookie.setMaxAge(24*60*60); //設(shè)置cookie有效期
resp.addCookie(cookie); //響應(yīng)給客戶端一個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()+"");
    //設(shè)置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:

  • 不設(shè)置有效期,關(guān)閉瀏覽器,自動失效;

  • 設(shè)置有效期時間為0;

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

4.Session

什么事session:

  • 服務(wù)器會給每一個用戶創(chuàng)建一個session對象

  • 一個session獨占一個瀏覽器,只要瀏覽器沒有關(guān)閉,這個Session就存在;

  • 用戶登錄之后,整個網(wǎng)站都可以訪問 -->保存用戶的信息;

JavaWeb Cookie和Session的概念是什么

Session常用的方法

JavaWeb Cookie和Session的概念是什么

Session和cookie的區(qū)別:

  • Cookie是把用戶的數(shù)據(jù)寫到用戶的瀏覽器,瀏覽器保存(可以保存多個)

  • session把用戶的數(shù)據(jù)寫到用戶獨占的Session中,服務(wù)器端保存(保存重要的信息,減少服務(wù)器資源的浪費)

  • session對象由服務(wù)器創(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配置

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

感謝各位的閱讀,以上就是“JavaWeb Cookie和Session的概念是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對JavaWeb Cookie和Session的概念是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI