基于Cookies的会话跟踪技术

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 01:29   206   0

会话跟踪:

Java Servlet API使用Session来跟踪会话和管理会话内的状态通过在每一个请求和响应中包含SessionID,服务器就可将用户分开。

在Servlet规范中,有三种机制用于会话跟踪:

1、SSL(secure socket layer)会话

2、Cookies

3、URL重写

1、Cookies:

Cookies是一种由服务器发给客户的片段信息,存储在客户端浏览器的内存中或硬盘上,在客户对服务器的请求中发送它。

Cookies以键-值对的方式记录会话跟踪的内容,服务器利用响应报头Set-Cookie来发送Cookie信息。在JavaServletAPI中,提供了javax.servlet.http.Cookie类,用于创建Cookie。

基于Cookies的会话跟踪:

在JavaServletAPI,javax.servlet.http.HttpSession接口封装了Session的概念,Servlet容器提供这个接口的实现。

当请求一个会话的时候,Servlet容器就创建一个HttpSession对象,并为该对象分配一个唯一的Session ID,将其作为Cookie发送给浏览器,浏览器在内存中保存这个Cookie。

2、基于URL重写的会话跟踪:

当客户端不接受Cookie的时候,可以使用URL重写的机制来跟踪用户的会话。URL重写就是在URL中附加标识客户的SessionID,Servlet容器解释URL,取出SessionID,根据它将请求与特定的Session关联。SessionID被编码为URL字符串中的路径参数,这个参数的名字必须是jsessionid。

服务器将SessionID作为URL的一部分发给客户端,客户端在请求URL中再传回来。

服务器将所有发往客户端的URL进行编码,可以通过HttpServletResponse接口中的encodeURL方法和encodeRedirectURL方法实现。

3、SSL(secure socket layer 安全套接字层):

SSL(secure socket layer 安全套接字层)是一种运行在TCP/IP之上像HTTP这种应用层协议之下的加密技术。SSL是在HTTPS协议中使用的加密技术。SSL可以让采用SSL的服务器认证采用SSL客户端,并却在客户端和服务器之间保持一种加密的联系。在建立了加密连接的过程中,客户和服务器都可以产生名叫“会话密钥”的东西,它是一种用于加密和解密消息的对称密钥。基于HTTPS协议的服务器可以使用这个客户端的对称密钥来建立会话。


基于cookies的会话跟踪的java代码:

SetCookies.java:

public class SetCookies extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 向客户端写入Cookie,共6个
        for(int i = 0; i < 3; i++) {
            // 3个没有设置时间的Cookie,属于本窗口及其子窗口
            Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
            response.addCookie(cookie);
            // 以下3个Cookie设置了时间(3600秒,1小时),属于文本,别的窗口也可以访问到这些Cookie
            cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
            cookie.setMaxAge(3600);
            response.addCookie(cookie);
        }
        
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out = response.getWriter();
        String title = "Setting Cookies";
        out.println("<html><head><title>设置Cookie</title></head>"
                + "<body>" + title + "<br>"
                + "There are six cookies associates with this page.<br>"
                + "to see them,visit the <a href=ShowCookies>"
                + "ShowCookies servlet</a>"
                + "</body></html>");
    } 
} 

ShowCookies:

public class ShowCookies extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html;charset=gb2312");
        PrintWriter pw = response.getWriter();
        String title = "Active Cookies";
        pw.println("init");
        pw.println("<html><head><title>读取客户端</title></head>"
                + title
                + "\n" + "<table border=1 align=center>\n"
                + "<TH>Cookie Name<TH>Cookie Value" + "<br>");
        
        // 读取客户端的所有Cookie
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            Cookie cookie;
            for(int i = 0; i < cookies.length; i++) {
                cookie = cookies[i];
                pw.println("<tr>\n" + "<td>" + cookie.getName() +"</td>\n"
                        + "<td>" + cookie.getValue() +"</td></tr>\n");
            }
        }
        pw.println("</table>\n<body><html>");
    } 
} 
配置web.xml

<servlet>
 
 <servlet-name>SetCookies</servlet-name>
 
 <servlet-class>SetCookies</servlet-class>

</servlet>

<servlet-mapping>
 
 <servlet-name>SetCookies</servlet-name>
 
 <url-pattern>/SetCookies</url-pattern>

</servlet-mapping>

<servlet>
 
 <servlet-name>ShowCookies</servlet-name>
 
 <servlet-class>ShowCookies</servlet-class>

</servlet>

<servlet-mapping>
 
 <servlet-name>ShowCookies</servlet-name>
 
 <url-pattern>/ShowCookies</url-pattern>

</servlet-mapping>










分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP