java--会话管理(Cookie Session)
来源:互联网 发布:厦门软件学院怎么样 编辑:程序博客网 时间:2024/04/25 10:08
Web服务器跟踪用户状态的方法:
重写URL,使它包含用于跟踪客户状态的数据。
用Cookie来传递用于跟踪客户状态的数据。将信息保存到客户端。
使用会话Session机制。由服务器来管理。
注意它们的区别:
一个是将信息保存到客户端。Cookie – javax.servlet.Cookie
一个是由服务器来维护。Session - javax.servlet.http.HttpSession
Cookie-简介:
Cookie,是客户端在访问web服务器时,服务器在客户端的机器上存放的信息。
服务器将Cookie保存在客户机器上的原因是为了跟踪客户的状态。这主要用于特殊的场合如电子商务。
JavaServletApi为Cookie提供了简单实现,javax.servlet.http.Cookie类表示Cookie。
Cookie保存客户端的硬盘上,通过key和value值来保存信息,类似于Map。Cookie的key和value不能使用中文。如果要保存中文,必须使进行编码。
切记:
Cookie保存的时间通过设置setMaxAge来设置 (默认值为-1)
如果大于0,就表示在客户机的硬盘上保存N秒。
如果小于0,就表示不将Cookie保存到客户机的硬盘上,当浏览器关闭时,Cookie当即消失。
如果等于0,就表示删除保存在客户机上的Cookie。
Cookie类的方法:
cookie.setMaxAge(60);在客户端保存的有效时间,以秒为单位。
cookie.setPath(“/”);设置Cookie的有效使用域。默认为当前Servlet所在的目录。
设置为/则整个tomcat有效。
设置为/myProj即,整个myProj项目有效。
setSecure(true|false);默认值为false,是否只支持https。
注意:
一般情况key值不建议使用中文。value值可以使用中文,但必须要经过编码才可以保存,否则保存时会抛出异常。
当然,读取经过编码的值时,必须要再解码。
主页
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Cookie/Session演示</title> </head> <body> <h2>Cookie/Session演示</h2> <a href="<%=request.getContextPath()%>/cookieServlet">CookieDemo基本用法</a> <h3>演示Cookie的访问权限</h3> <form action="<%=request.getContextPath() %>/servlet/cookieServlet"> 姓名:<input type="text" name="name"/><br/> <input type="submit" value="提交"/> </form> <pre> <font color="red" size="5">cookie权限(相同路径可以读取.子路径的servlet可以读上级路径的cookie,反之不行!):</font> 说明:cookie的path(路径): 通过 coo.setPath()来设置的 servlet的路径: 在web.xml中用< url-pattern>来配置 1)可以读取---相同路径 CookieServletDemo_2(/servlet/cookieServlet)的cookie设置的path= reqeust.getContextPath() ---等价于“/” 读取cookie的servlet--CookieServletDemo(/cookieServlet)的路径: / 2)下面的也可以读---子路径的servlet 可以读 上级路径的cookie CookieServletDemo(/cookieServlet)的cookie设置的path= reqeust.getContextPath() ---等价于“/” 读取cookie的servlet--CookieServletDemo_2(/servlet/cookieServlet)的路径: /servlet 3)下面的不可以读 CookieServletDemo_2(/servlet/cookieServlet)的cookie设置的path= reqeust.getContextPath()/servlet ---等价于“/servlet” 读取cookie的servlet--CookieServletDemo(/cookieServlet)的路径: / </pre> </body></html>
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieServletDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); //分离式做法--streth框架// addCookie(request,response);//Cookie添加/修改---向浏览器/客户端添加 readCookie(request,response);//读客户端发来的Cookie// delCookie(request,response);//就是向浏览器添加一个maxAge值为0的key与将要被删除Cookie的key相同的Cookie out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } private void delCookie(HttpServletRequest request, HttpServletResponse response) { Cookie coo=new Cookie("name", "123");//删除key为nam的属性 coo.setMaxAge(0);//设置有效期为0,即删除 Cookie coo.setPath(request.getContextPath());// response.addCookie(coo); } private void readCookie(HttpServletRequest request, HttpServletResponse response) throws IOException { Cookie cs[]=request.getCookies(); if (cs!=null) { for (Cookie c : cs) { String key=c.getName(); String value=c.getValue(); //value中文需要解码 value=URLDecoder.decode(value, "utf-8"); int maxAge=c.getMaxAge(); System.out.println("CookieServletDemo读的Cookie:key="+key+",value="+value+"maxAge="+maxAge); } }else{ System.out.println("CookieServletDemo读的Cookie:null"); } } private void addCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {//Cookie添加/修改---向浏览器/客户端添加// String name="aa";//1.写死了 /*//2.不是中文 String name="hncu"; Random r=new Random(); int i=r.nextInt(1000);//1000以内的某个整数 name+=i;*/ //3.中文 String name="湖南城院"; System.out.println(name); //name为中文时,需要编码--否则出现500编码问题 name=URLEncoder.encode(name, "utf-8"); Random r=new Random(); int i=r.nextInt(1000);//1000以内的某个整数 name+=i; System.out.println("CookieServletDemo添加/修改Cookie:"+name); Cookie coo=new Cookie("name", name); coo.setMaxAge(60*60);//有效期为一个小时--为该Cookie设置有效期,浏览器自动转成过期时间 //2.演示 可以读---子路径的servlet可以读 上级路径的cookie coo.setPath(request.getContextPath());//由路径控制访问权限 response.addCookie(coo); //如果存在相同的key的Cookie,则是覆盖(修改).若不存在则是新建(添加) }}
增改Cookie
查Cookie
删Cookie
package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieServletDemo_2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); //分离式做法--streth框架 addCookie(request,response);//Cookie添加/修改---向浏览器/客户端添加// readCookie(request,response);//读客户端发来的Cookie out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } private void readCookie(HttpServletRequest request, HttpServletResponse response) throws IOException { Cookie cs[]=request.getCookies(); if (cs!=null) { for (Cookie c : cs) { String key=c.getName(); String value=c.getValue(); //value中文需要解码 value=URLDecoder.decode(value, "utf-8"); int maxAge=c.getMaxAge(); System.out.println("CookieServletDemo_2读的Cookie:key="+key+",value="+value+"maxAge="+maxAge); } } } private void addCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {//Cookie添加/修改---向浏览器/客户端添加// String name="aa";//1.写死了 /*//2.不是中文 String name="hncu"; Random r=new Random(); int i=r.nextInt(1000);//1000以内的某个整数 name+=i;*/ //3.中文 String name="湖南城院"; System.out.println(name); //name为中文时,需要编码--否则出现500编码问题 name=URLEncoder.encode(name, "utf-8"); Random r=new Random(); int i=r.nextInt(1000);//1000以内的某个整数 name+=i; Cookie coo=new Cookie("name", name); coo.setMaxAge(60*60);//有效期为一个小时--为该Cookie设置有效期,浏览器自动转成过期时间 //1.演示 可以读取---相同路径// System.out.println("CookieServletDemo_2添加/修改Cookie(设置为相同路径):"+name);// coo.setPath(request.getContextPath());//由路径控制访问权限 //3.演示 不可以读取--上级路径的servlet不可以读子路径的cookie System.out.println("CookieServletDemo_2添加/修改Cookie(设置为子路径):"+name); coo.setPath(request.getContextPath()+"/servlet");//由路径控制访问权限 response.addCookie(coo); //如果存在相同的key的Cookie,则是覆盖(修改).若不存在则是新建(添加) }}
1)可以读取—相同路径
2)可以读—子路径的servlet可以读 上级路径的cookie
3)不可以读取–上级路径的servlet不可以读子路径的cookie
配置文件
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>CookieServletDemo</servlet-name> <servlet-class>cn.hncu.servlet.CookieServletDemo</servlet-class> </servlet> <servlet> <servlet-name>CookieServletDemo_2</servlet-name> <servlet-class>cn.hncu.servlet.CookieServletDemo_2</servlet-class> </servlet> <servlet-mapping> <servlet-name>CookieServletDemo</servlet-name> <url-pattern>/cookieServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>CookieServletDemo_2</servlet-name> <url-pattern>/servlet/cookieServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
- java--会话管理(Cookie Session)
- java--会话管理(Cookie Session)_2
- java的会话管理:Cookie和Session
- java的会话管理:Cookie和Session
- java的会话管理:Cookie和Session
- 会话管理 Cookie&session
- 会话管理技术Cookie&Session
- 会话管理cookie与session
- 会话管理(Cookie、Session)
- 会话管理---Cookie与Session
- java的会话管理:Cookie和Session(转)
- 会话管理:Cookie与Session技术
- 14、会话管理(cookie技术、session技术)
- Cookie和Session会话管理基础
- 会话管理之Cookie技术+Session技术
- java Cookie进行会话管理
- java web之会话技术cookie+session
- Java Web之五 会话Cookie Session
- Fragment的事务操作&Actvity的状态丢失
- 59. Spiral Matrix II
- 利用浏览器Fvd Downloader插件下载网页视频、音乐
- 对AngularJs的学习
- Zephys OS nano 内核篇:fiber 服务
- java--会话管理(Cookie Session)
- 今天根据PDM创建数据表遇见的问题
- Zephys OS nano内核篇:原子操作
- hdu oj 2719 The Seven Percent Solution
- java 修改指定路径下所有文件名称
- php mysql_affected_rows获取sql执行影响的行数
- 从留言板开始做网站(六)——留言内容显示(数据读取)
- Zephyr OS 内核篇: 内核链表
- linux 查看文件命令 file which whereis locate find