码迷,mamicode.com
首页 > 其他好文 > 详细

Cookie

时间:2015-12-17 15:56:45      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

Http的是一种无状态协议,一旦数据交换完毕,客户端与服务端的连接就会关闭。在此交换数据需要建立新的连接,喝酒意味着服务器无法从连接上跟踪会话。

Cookie是一种机制,几乎所有浏览器都支持。

Cookie原理:既然服务器无法从连接上知道用户的身份,那就给每个连接颁发一个通行证,这样服务器就能知道客户的身份了。

Cookie实际上就是一小段文本信息。当客户端请求服务器并且服务器需要记录该用户的状态,就用response向客户端浏览器颁发一个cookie。当浏览器再次请求该网站时,浏览器就会将请求连同Cookie一起发给服务器,这样服务器就能识别用户了。

 

Cookie的添加:

Cookie被封装成javax.servlet.http.Cookie.Cookie中的信息以键值对的形式存在

由定义可知,Cookie由response添加,可以再请求中查询。

Cookie的更改:

Cookie不提供更改操作,想要修改Cookie的值。只需要新建一个同名的Cookie并将新值付给他就可以了。

Cookie的删除:

Cookie同样不提供删除操作,想要删除Cookie,只需要建一个同名的Cookie,并且把他的maxAge设为0;

 

Cookie的不可跨域名性质:

我们每天访问很多网站,他们都会给我们颁发Cookie,但是这些Cookie只会在访问颁发网站时才会连同请求一起发给服务器。浏览器会根据相应的域名来寻找相应的Cookie。

 

Cookie的域名:

Cookie中提供了可以访问该Cookie的域名方法。

我们经常访问的百度可能有www.baidu.com和images.baidu.com 我们都用百度账号来登录他。所以只需一个Cookie即可。我们可以设置Cookie的域名为.baidu.com 这样凡是以baidu.com结尾的域名均可以访问。

Cookie 使用 domain方法设置域名 必须以"."开头

 

Cookie的路径:

path方法可以设置访问的路径 如果只希望contextPath路径下的Login文件夹下的文件访问该Cookie 可以设置path("/Login/");

第一个"/"代表web的根目录 必须以"/"结尾。

 

Cookie的有效期:

maxAge代表cookie的有效期,当maxAge为正数时,代表持久化的时间,单位为秒 ,既在maxAge秒后,该Cookie失效

当maxAge为0时,表示删除该Cookie

当maxAge为负数时,表示的是临时性Cookie,这种Cookie尽在本次访问的有效。

默认为-1

 

下面是一个使用cookie保存用户信息的案例

这个案例没有连接数据库,所以保存的用户名和密码我们存在servlet的初始化参数中。

    <servlet>
        <servlet-name>Login</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
        <init-param>
            <param-name>Username</param-name>
            <param-value>张三</param-value>
        </init-param>
        <init-param>
            <param-name>Passwd</param-name>
            <param-value>qdm</param-value>
        </init-param>
    </servlet>

在servlet中保存并设置Cookie

 request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; UTF-8");
        final String USERNAME=getInitParameter("Username");
        final String PASSWD=getInitParameter("Passwd");

        String username=request.getParameter("user");
        String passwd=request.getParameter("passwd");
        if(username.equals(USERNAME) && passwd.equals(PASSWD))
        {
            Cookie c=new Cookie("user",URLEncoder.encode(USERNAME,"UTF-8"));
            Cookie c2=new Cookie("passwd",URLEncoder.encode(PASSWD,"UTF-8"));
            c.setMaxAge(10*60);
            c.setPath("/");
            c2.setMaxAge(10*60);
            c2.setPath("/");
            response.addCookie(c);
            response.addCookie(c2);
            response.sendRedirect("http://localhost:8080//index.jsp");
            PrintWriter out=response.getWriter();
            out.println("login success");
        }
        else
        {
            System.out.println(username+"  "+passwd);
            PrintWriter out=response.getWriter();
            out.println("login failed");
        }
    }


在jsp界面的前要先获取cookie信息。

<%
Cookie[] cookies=request.getCookies();
  String username="请输入用户名";
  String passwd="passwd";
  if(cookies!=null && cookies.length>0)
  {
    for(Cookie c:cookies)
    {
      out.println(c.getName()+"   "+c.getValue()+"<br>");
      if(c.getName().equals("user"))
      {
        username= URLDecoder.decode(c.getValue(),"UTF-8");
      }
      else if(c.getName().equals("passwd"))
      {
        passwd=URLDecoder.decode(c.getValue(),"UTF-8");
      }
    }
  }
%>

 

Cookie

标签:

原文地址:http://www.cnblogs.com/Seffrui/p/5053693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!