javaweb学习——会话技术(一)

会话:

1.什么是会话:从打开一个浏览器,访问页面,到最终关闭浏览器的一个过程,就是一次会话。

2.会话的特点:包含多个请求,一次完整的会话是只针对一个用户。

3.会话机制:web中常用的技术,用来跟踪用户的整个会话,常用的会话跟踪技术有Cookie和session。

  Cookie通过在客户端记录信息,确定用户的身份。

  session通过在服务端记录信息,确定用户的身份。

4.为什么要引入会话机制:

  由于Http web协议是无状态的协议,对于事务的处理是没有记忆能力。缺少状态意味着如果要处理前面的信息,则他必须重传,这样可能导致每次连接传送的数据量增大,客户端和服务端进行交互的web应用出现了后,HTTP无状态的特征严重阻碍了这些应用的实现,毕竟交互是要承前启后的,例如,购物车中付款时要知道用户之前选择了什么商品,于是,两种保持HTTP状态的技术就出现了,一种时Cookie,一种是session。

Cookie:

1.什么是Cookie:

  Cookie是一种会话技术,用于将会话过程中的数据保存到客户端中,从而使浏览器和服务器进行更好的数据交互,简单的来说Cookie是web服务器暂时存储在用户硬盘上的一个文本文件,并随后被Web服务器读取,服务器读取Cookie时,只能读取到这个服务器相关的信息,而且,浏览器一般只能存储300个Cookie,每个服务器只能放20个Cookie在浏览器中,每个Cookie的大小是能是4Kb。

2.创建Cookie:

  Cookie cookie=new Cookie(java.long.String name ,  java.long.String value);

3.Cookie的方法:

  String getName():返回Cookie的名字。

  void setValue(String newValue):用于为Cookie设置一个新的值。

  String getValue():返回Cookie的值。

  void setMaxAge(int expiry):用于设置Cookie在浏览器上的有效的秒数。

  int getMaxAge():获取Cookie在浏览器上的有效的秒数。

  void setPath():设置Cookie项的有效路劲。

  String getPath():获取Cookie的有效路径。

  void setDamain(String pattern):用于设置Cookie的有效域

  String getDomain():用来获取Cookie的有效域。

4.常用方法:

  1)setMaxAge(int expiry)和getMaxAge()

      以上两个方法用于设置Cookie的有效秒数和获取Cookie的有效秒数。

    expiry的取值:为正数时,浏览器会将Cookie信息保存在本地硬盘中,从当前时间开始计算,在没有超过该秒数时,这个Cookie都有效。

           为负数时,浏览器会将Cookie保存在缓存中,当浏览器关闭时,这个Cookie就会被删除。

           为0时,浏览器就会立即删除这个Cookie。

    Cookie并不提供删除操作,如果要删除某个Cookie,则需要新创建一个同名Cookie,设置其maxAge为0,并添加到response中覆盖原来的            Cookie。

  2)setDomain(String pattern)和getDamain()

    以上两个方法用来设置和获取Cookie的有效域

5.获取Cookie和设置Cookie:

  可以使用request.getCookie()来获取客户端提交的所有Cookie(以Cookie[]数组的形式返回),通过response.addCookie(Cookie cookie)向客户端设置Cookie。

  Cookie对象是使用key-value键值对来保存用户的状态,一个Cookie对象保存一个属性对。一个response或者request是可以使用多个Cookie的,因为Cookie类是位于包javax.servlet.http.*下面,所以jsp中是不需要import该类。

6.Cookie的不可跨域名性

  很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

  答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

  Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。

  需要注意的是,虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。

注意:用户登录网站www.google.com之后会发现访问images.google.com时登录信息仍然有效,而普通的Cookie是做不到的。这是因为Google做了特殊处理。本章后面也会对Cookie做类似的处理。

7.Cookie的域

  Cookie是不可跨域名的。域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。

  正常情况下,同一个一级域名下的两个二级域名如www.helloweenvsfei.com和images.helloweenvsfei.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有helloweenvsfei.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数,例如:

    Cookie cookie = new Cookie("time","20080808"); // 新建Cookie

    cookie.setDomain(".helloweenvsfei.com");           // 设置域名

    cookie.setPath("/");                              // 设置路径

    cookie.setMaxAge(Integer.MAX_VALUE);               // 设置有效期

    response.addCookie(cookie);                       // 输出到客户端

   读者可以修改本机C:\WINDOWS\system32\drivers\etc下的hosts文件来配置多个临时域名,然后使用setCookie.jsp程序来设置跨域名Cookie验证domain属性。

  注意:domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie,可以生成两个Cookie,domain属性分别为两个域名,输出到客户端。

8.Cookie的路径

  domain属性决定运行访问Cookie的域名,而path属性决定允许访问Cookie的路径(ContextPath)。例如,如果只允许/sessionWeb/下的程序使用Cookie,可以这么写:

    Cookie cookie = new Cookie("time","20080808");     // 新建Cookie

    cookie.setPath("/session/");                          // 设置路径

    response.addCookie(cookie);                           // 输出到客户端

  设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。name相同但domain相同的两个Cookie也是两个不同的Cookie。

  注意:页面只能获取它属于的Path的Cookie。例如/session/test/a.jsp不能获取到路径为/session/abc/的Cookie。使用时一定要注意。

package cn.it.gan.CookieDemo;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Cookie实例,用来获取用户上一次访问的时间
 * @author 12428
 *
 */
public class CookieDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public CookieDemo() {
        super();

    }

    @SuppressWarnings("deprecation")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置服务端以UTF-8编码进行输出
        response.setCharacterEncoding("utf-8");
        //设置服务器以utf-8的编码接受数据
        response.setContentType("text/html;charset=utf-8");
        //获取输出对象
        PrintWriter out=response.getWriter();

        //获取浏览器访问时带来的Cookies数组
        Cookie[] cookies=request.getCookies();
        //判断用户是否时第一次访问
        if(cookies !=null) {
            out.write("你上此访问的时间是:");
            for(int i=0;i<cookies.length;i++) {
                Cookie cookie=cookies[i];
                if(cookie.getName().equals("lastAccess")) {
                    Long lastAccessTime=Long.parseLong(cookie.getValue());
                    Date date=new Date(lastAccessTime);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("你是第一次访问本站!");
        }

        //用户访问过后要重新设置访问时间,并把时间存到Cookie的值
        Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
        //将Cookie存到response对象中,输出response时,也会包cookie送给服务端
        response.addCookie(cookie);

    }

    @SuppressWarnings("deprecation")
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

    在Cookie发送到客户端前,要先创建一个Cookie。然后使用response的add Cookie(Cookie cookie)发送一个HTTP Header到客户端。

    获取指定的Cookie时,使用request的getCookies()方法从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中内容对应的Cookie数组,只需要使用循环访问数组中的每个元素,调用getName方法检查每个Cookie的名字,直至找到对应的Cookie,然后调用该Cookie的getValue方法获得指定名字关联的值。

---------------------
作者:fangaoxin
来源:CSDN
原文:https://blog.csdn.net/fangaoxin/article/details/6952954
版权声明:本文为博主原创文章,转载请附上博文链接!

  

  

  

原文地址:https://www.cnblogs.com/zhilili/p/10863811.html

时间: 2024-11-09 04:00:57

javaweb学习——会话技术(一)的相关文章

JavaWeb学习笔记五 会话技术Cookie&amp;Session

什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器记住客户端状态(区分客户端). 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的.会话技术分为Cookie和Session: Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除

JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatcher("/secondServlet"); request.setAttribute("pwd","123");//这里设置的值在secondServlet中可以获取到 dispatcher.forward(request, response);//调

javaweb学习总结——使用Cookie进行会话管理(转载)

javaweb学习总结--使用Cookie进行会话管理(转载) 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话. 二.会话过程中要解决的一些问题? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据. 三.保存会话数据的两种技术 3.1.Cookie Cooki

Servlet学习(七)——会话技术cookie&amp;session

一.会话技术简介 1.存储客户端的状态 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器记住客户端状态(或者说区分客户端,是张三登录的还是李四登录的) 2.会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Cookie和Session: Cookie:数据

JavaWeb——会话技术Cookie &amp; Session

会话技术 因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器记住客户端状态(区分不同的客户端) 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的.会话技术分为Cookie和Session: Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除cookie Session:将数据存储到服务器端,安

JavaWeb学习总结——Session(转载)

JavaWeb学习总结--Session(转载) 一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. S

会话技术Session&amp;Cookie

一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器   记住客户端状态(区分客户端) 举例购物过程: 2.会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Cookie和Sessio

【JAVAWEB学习笔记】16

会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并   不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器    记住客户端状态(区分客户端) 2.会话技术 从打开一个浏览器访问某

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.