日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

中國最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2

servlet教程

Servlet Session 跟蹤

閱讀 (2174)

Servlet Session 跟蹤

HTTP 是一種"無狀態(tài)"協(xié)議,這意味著每次客戶端檢索網(wǎng)頁時(shí),客戶端打開一個(gè)單獨(dú)的連接到 Web 服務(wù)器,服務(wù)器會自動(dòng)不保留之前客戶端請求的任何記錄。

但是仍然有以下三種方式來維持 Web 客戶端和 Web 服務(wù)器之間的 session 會話:

Cookies

一個(gè) Web 服務(wù)器可以分配一個(gè)唯一的 session 會話 ID 作為每個(gè) Web 客戶端的 cookie,對于客戶端的后續(xù)請求可以使用接收到的 cookie 來識別。

這可能不是一個(gè)有效的方法,因?yàn)楹芏酁g覽器不支持 cookie,所以我們建議不要使用這種方式來維持 session 會話。

隱藏的表單字段

一個(gè) Web 服務(wù)器可以發(fā)送一個(gè)隱藏的 HTML 表單字段,以及一個(gè)唯一的 session 會話 ID,如下所示:

<input type="hidden" name="sessionid" value="12345">

該條目意味著,當(dāng)表單被提交時(shí),指定的名稱和值會被自動(dòng)包含在 GET 或 POST 數(shù)據(jù)中。每次當(dāng) Web 瀏覽器發(fā)送回請求時(shí),session_id 值可以用于保持不同的 Web 瀏覽器的跟蹤。

這可能是一種保持 session 會話跟蹤的有效方式,但是點(diǎn)擊常規(guī)的超文本鏈接(<A HREF...>)不會導(dǎo)致表單提交,因此隱藏的表單字段也不支持常規(guī)的 session 會話跟蹤。

URL 重寫

您可以在每個(gè) URL 末尾追加一些額外的數(shù)據(jù)來標(biāo)識 session 會話,服務(wù)器會把該 session 會話標(biāo)識符與已存儲的有關(guān) session 會話的數(shù)據(jù)相關(guān)聯(lián)。

例如,http://w3cschool.cn/file.htm;sessionid=12345,session 會話標(biāo)識符被附加為 sessionid=12345,標(biāo)識符可被 Web 服務(wù)器訪問以識別客戶端。

URL 重寫是一種更好的維持 session 會話的方式,它在瀏覽器不支持 cookie 時(shí)能夠很好地工作,但是它的缺點(diǎn)是會動(dòng)態(tài)生成每個(gè) URL 來為頁面分配一個(gè) session 會話 ID,即使是在很簡單的靜態(tài) HTML 頁面中也會如此。

HttpSession 對象

除了上述的三種方式,Servlet 還提供了 HttpSession 接口,該接口提供了一種跨多個(gè)頁面請求或訪問網(wǎng)站時(shí)識別用戶以及存儲有關(guān)用戶信息的方式。

Servlet 容器使用這個(gè)接口來創(chuàng)建一個(gè) HTTP 客戶端和 HTTP 服務(wù)器之間的 session 會話。會話持續(xù)一個(gè)指定的時(shí)間段,跨多個(gè)連接或頁面請求。

您會通過調(diào)用 HttpServletRequest 的公共方法 getSession() 來獲取 HttpSession 對象,如下所示:

HttpSession session = request.getSession();

你需要在向客戶端發(fā)送任何文檔內(nèi)容之前調(diào)用 request.getSession()。下面總結(jié)了 HttpSession 對象中可用的幾個(gè)重要的方法:

序號方法 & 描述
1public Object getAttribute(String name)
該方法返回在該 session 會話中具有指定名稱的對象,如果沒有指定名稱的對象,則返回 null。
2public Enumeration getAttributeNames()
該方法返回 String 對象的枚舉,String 對象包含所有綁定到該 session 會話的對象的名稱。
3public long getCreationTime()
該方法返回該 session 會話被創(chuàng)建的時(shí)間,自格林尼治標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日午夜算起,以毫秒為單位。
4public String getId()
該方法返回一個(gè)包含分配給該 session 會話的唯一標(biāo)識符的字符串。
5public long getLastAccessedTime()
該方法返回客戶端最后一次發(fā)送與該 session 會話相關(guān)的請求的時(shí)間自格林尼治標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日午夜算起,以毫秒為單位。
6public int getMaxInactiveInterval()
該方法返回 Servlet 容器在客戶端訪問時(shí)保持 session 會話打開的最大時(shí)間間隔,以秒為單位。
7public void invalidate()
該方法指示該 session 會話無效,并解除綁定到它上面的任何對象。
8public boolean isNew(
如果客戶端還不知道該 session 會話,或者如果客戶選擇不參入該 session 會話,則該方法返回 true。
9public void removeAttribute(String name)
該方法將從該 session 會話移除指定名稱的對象。
10public void setAttribute(String name, Object value)
該方法使用指定的名稱綁定一個(gè)對象到該 session 會話。
11public void setMaxInactiveInterval(int interval)
該方法在 Servlet 容器指示該 session 會話無效之前,指定客戶端請求之間的時(shí)間,以秒為單位。

Session 跟蹤實(shí)例

本實(shí)例說明了如何使用 HttpSession 對象獲取 session 會話創(chuàng)建時(shí)間和最后訪問時(shí)間。如果不存在 session 會話,我們將通過請求創(chuàng)建一個(gè)新的 session 會話。

// 導(dǎo)入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// 擴(kuò)展 HttpServlet 類
public class SessionTrack extends HttpServlet {
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 如果不存在 session 會話,則創(chuàng)建一個(gè) session 對象
      HttpSession session = request.getSession(true);
      // 獲取 session 創(chuàng)建時(shí)間
      Date createTime = new Date(session.getCreationTime());
      // 獲取該網(wǎng)頁的最后一次訪問時(shí)間
      Date lastAccessTime = 
                        new Date(session.getLastAccessedTime());

      String title = "歡迎回到我的網(wǎng)站";
      Integer visitCount = new Integer(0);
      String visitCountKey = new String("visitCount");
      String userIDKey = new String("userID");
      String userID = new String("ABCD");

      // 檢查網(wǎng)頁上是否有新的訪問者
      if (session.isNew()){
         title = "歡迎來到我的網(wǎng)站";
         session.setAttribute(userIDKey, userID);
      } else {
         visitCount = (Integer)session.getAttribute(visitCountKey);
         visitCount = visitCount + 1;
         userID = (String)session.getAttribute(userIDKey);
      }
      session.setAttribute(visitCountKey,  visitCount);

      // 設(shè)置響應(yīng)內(nèi)容類型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +       "transitional//en\">\n";
      out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                 "<h2 align=\"center\">Session 信息</h2>\n" +
                "<table border=\"1\" align=\"center\">\n" +
                "<tr bgcolor=\"#949494\">\n" +
                "  <th>Session 信息</th><th>值</th></tr>\n" +
                "<tr>\n" +
                "  <td>id</td>\n" +
                "  <td>" + session.getId() + "</td></tr>\n" +
                "<tr>\n" +
                "  <td>Creation Time</td>\n" +
                "  <td>" + createTime + 
                "  </td></tr>\n" +
                "<tr>\n" +
                "  <td>Time of Last Access</td>\n" +
                "  <td>" + lastAccessTime + 
                "  </td></tr>\n" +
                "<tr>\n" +
                "  <td>User ID</td>\n" +
                "  <td>" + userID + 
                "  </td></tr>\n" +
                "<tr>\n" +
                "  <td>Number of visits</td>\n" +
                "  <td>" + visitCount + "</td></tr>\n" +
                "</table>\n" +
                "</body></html>");
  }
}

編譯上面的 Servlet SessionTrack,并在 web.xml 文件中創(chuàng)建適當(dāng)?shù)臈l目。在瀏覽器地址欄輸入 http://localhost:8080/SessionTrack,當(dāng)您第一次運(yùn)行時(shí)將顯示如下結(jié)果:

歡迎來到我的網(wǎng)站

Session 信息

Session 信息
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2014
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2014
User ID ABCD
Number of visits 0

再次嘗試運(yùn)行相同的 Servlet,它將顯示如下結(jié)果:

歡迎回到我的網(wǎng)站

Session 信息

Session 信息
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2014
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2014
User ID ABCD
Number of visits 1

刪除 Session 會話數(shù)據(jù)

當(dāng)您完成了一個(gè)用戶的 session 會話數(shù)據(jù),您有以下幾種選擇:

  • 移除一個(gè)特定的屬性:您可以調(diào)用 public void removeAttribute(String name) 方法來刪除與特定的鍵相關(guān)聯(lián)的值。 to delete the value associated with a particular key.
  • 刪除整個(gè) session 會話:您可以調(diào)用 public void invalidate() 方法來丟棄整個(gè) session 會話。
  • 設(shè)置 session 會話過期時(shí)間:您可以調(diào)用 public void setMaxInactiveInterval(int interval) 方法來單獨(dú)設(shè)置 session 會話超時(shí)。
  • 注銷用戶:如果使用的是支持 servlet 2.4 的服務(wù)器,您可以調(diào)用 logout 來注銷 Web 服務(wù)器的客戶端,并把屬于所有用戶的所有 session 會話設(shè)置為無效。
  • web.xml 配置:如果您使用的是 Tomcat,除了上述方法,您還可以在 web.xml 文件中配置 session 會話超時(shí),如下所示:
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

上面實(shí)例中的超時(shí)時(shí)間是以分鐘為單位,將覆蓋 Tomcat 中默認(rèn)的 30 分鐘超時(shí)時(shí)間。

在一個(gè) Servlet 中的 getMaxInactiveInterval() 方法會返回 session 會話的超時(shí)時(shí)間,以秒為單位。所以,如果在 web.xml 中配置 session 會話超時(shí)時(shí)間為 15 分鐘,那么 getMaxInactiveInterval() 會返回 900。

關(guān)閉
程序員人生
主站蜘蛛池模板: 国产黄色av网站 | 毛片录像| 精品日产卡一卡二卡麻豆 | 国产精品日韩欧美一区二区三区 | 看全黄大色黄大片美女爽一次 | 成人影视免费 | 欧美一级黄色片免费观看 | 特黄网站| 一本久久精品一区二区 | 国产精品欧美一区二区三区 | 成人欧美一区二区三区视频网页 | 美女又爽又黄视频毛茸茸 | 久草视频中文在线 | 国产精品国产精品国产专区不蜜 | 九九在线精品视频 | 中文二区 | 久久影视一区 | 在线高清av | 中文字幕91 | 亚洲成人av在线 | 成人影视免费观看 | 一区在线不卡 | 在线观看日韩精品 | 一区二区三区四区国产精品 | 99精品免费久久久久久久久 | 一级黄色av | 青青草网| 久久久久久一区 | 最近中文字幕国语免费高清6 | 免费观看高清韩国日本大全 | 国产一区二区三区视频在线观看 | 亚洲成人毛片 | 国产精品美女久久久久高潮 | www.色网| 国产黄a | 国产欧美精品一区aⅴ影院 99爱在线视频 | 精品国产不卡一区二区三区 | av片网站| 久久久久久一区二区三区四区别墅 | 高清久久 | 一级片a级片 |