标签:
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"); } } } %>
标签:
原文地址:http://www.cnblogs.com/Seffrui/p/5053693.html