您的位置:首页 > 其它

Cookie和Session-----会话跟踪中的两个重要技术

2012-03-06 16:00 525 查看
Cookie的工作原理:

Cookie是最常用的客户会话跟踪技术。Cookie是将会话数据保存在客户端来维护会话状态的一种方式。它是服务器发送给浏览器的体积很小的纯文本信息,用户以后在访问同一个Web服务器时,浏览器会把Cookie原样发送给服务器。通过这种方式,保存了用户的会话状态。

Cookie分为两类:持久的和暂时的。持久的Cookie会被存储在客户端文件中;暂时的Cookie存储在内存中,一旦浏览器关闭Cookie就消失了。一般来说,客户端浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4kb,因此Cookie不会占用太大的硬盘空间。虽然Cookie很好用而且持久性高,但是由于有些用户担心Cookie对个人隐私有威胁,会关闭Cookie。一旦这样,便无法利用Cookie来达到会话追踪的功能了。下面看看Cookie具体怎么使用:

SetCookies.java(写入)

[java]
view plaincopy

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class SetCookies extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

Cookie c1 = new Cookie("password", "123");
response.addCookie(c1);

Cookie c2 = new Cookie("client_ip", request.getRemoteAddr());

//设置cookie的生命周期为一个小时,单位为秒
c2.setMaxAge(60*60);
response.addCookie(c2);

response.getWriter().println("SetCookies OK!");
}
}

ShowCookies.java(读取)

[java]
view plaincopy

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowCookies extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] Cookies = request.getCookies();
for (int i=0; i<Cookies.length; i++) {
Cookie c = Cookies[i];
response.getWriter().println(c.getName() + ", " + c.getValue());
}
}
}

Session的工作原理:

HttpSession对象自动为开发者提供一个可以方便地存储会话信息的地方,HttpSession的会话机制是基于Cookie和URL重写(URL重写就是利用GET方法,在URL的尾部添加一些额外的参数来达到会话追踪的目的)技术,融合了这两种技术的优点。当客户端允许使用Cookie时,HttpSession对象使用Cookie进行会话追踪,如果客户端禁用Cookie,则选择使用URL重写。

session与Cookie一样拥有特定的生命周期。一个session可以利用isNew方法来得知是否为一个新的session。所谓“新”的session就是说,他已经被Server产生,但是Client尚未被告知。

一般来说,session在一段时间内没有起作用就会自动失效,也就是Server会自动控管session失效的时间,不过时间的长短通常因容器而异,也可以自己手动设定session的失效时间。下面看看session具体怎么使用:

SetSessionServlet.java(写入)

[java]
view plaincopy

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class SetSessionServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(true);
session.setAttribute("ip", request.getRemoteAddr());

response.getWriter().println("SetSession OK!");
}
}

ShowSessionServlet.java(读出)

[java]
view plaincopy

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowSessionServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(true);
String ip = (String)session.getAttribute("ip");
response.getWriter().println("ip=" + ip);
}
}

简单的总结了一下,正在学习中... ...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: