一、Session简单介绍
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
二、Cookie简单介绍
“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。
三、Session和Cookie的主要区别
1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session
因此,维持一个会话的核心就是客户端的唯一标识,即 session id
四、Session和Cookie的用法
Session:
1、设置session的标记
<span style="white-space:pre"> </span>//在把user对象放入session中,有了标记,这点儿很重要。 request.getSession().setAttribute("user", user);//前者是标记名字,后者是对象
2、得到session,名字必须和设置的标记名一样
<span style="white-space:pre"> </span>//得到session中的session验证码 String sessuoncode=(String)request.getSession().getAttribute("user");
3、关闭sesion与对象的关联或者直接销毁session
request.getSession().removeAttribute("user");//删除了域中绑定的对象 // request.getSession().invalidate();//这是直接销毁session,可任选一种
注:session的缓存时间(有三种方式,建议使用默认或者实现接口,implements Serializable)
<span style="white-space:pre"> </span>//session.setMaxInactiveInterval(2); //setMaxInactiveInterval表示2秒内不对session做出操作,自动删除session //一般情况下,不用设置这个函数,因为getMaxInactiveInterval()的session的默认失效为1800毫秒也就是半分钟 //System.out.println(session.getMaxInactiveInterval());//打印默认session存在时间
Cookie:
response.addCookie(Cookie cookie)是将一个cookie对象传入客户端。
Cookie cookie=new Cookie(String name,String value):构造一个cookie对象
request.getCookies():得到所有的cookie对象
cookie.getName():得到此cookie对象的名字
cookie.getValue(String name):得到对应名称的cookie的值
1.在使用cookie的时候,首先要注意浏览器是否支持cookie,可以用过设置浏览器,使其支持使用cookie
2.如果要使cookie保存中文的信息,需要使用java.net.URLEncoder类的encode方法进行编码,需要使用java.net.URLDecoder的decode方法进行解码。 这种方法和String类的编码和解码类似,String的编码方法是byte[] b=str.getBytes();//这是使用本地默认的编码格式进行编码,或者是byte[] b=str.getBytes("utf-8");//这种是以utf-8的方式进行解码,也可以使用其他的类型。我们要用同一种编码格式进行解码和编码,不然有可能会出现乱码问题,这种编码和解码的方式也可以解决get方式乱码问题。
cookie的几种常见属性:document.cookie="key=value;expires=失效时间;path=路径;domain=域名;secure;(secure表安全级别),cookie以字符串的形式保存在浏览器中。
3、封装的cookie的存入,读取以及删除的函数:(这里是将信息以对象的形式存放到cookie中的,会用到JSON的知识)
// key : cookie 名 // value : cookie 值 // options : 可选配置参数 // options = { // expires : 7|new Date(), // 失效时间 // path : "/", // 路径 // domain : "", // 域名 // secure : true // 安全连接 // } function cookie(key, value, options) { /* read 读取 */ // 如果没有传递 value ,则表示根据 key 读取 cookie 值 if (typeof value === "undefined") { // 读取 // 获取当前域下所有的 cookie,保存到 cookies 数组中 var cookies = document.cookie.split("; "); // 遍历 cookies 数组中的每个元素 for (var i = 0, len = cookies.length; i < len; i++) { // cookies[i] : 当前遍历到的元素,代表的是 "key=value" 意思的字符串, // 将字符串以 = 号分割返回的数组中第一个元素表示 key, // 第二个元素表示 value var cookie = cookies[i].split("="); // 判断是否是要查找的 key,对查找的 key 、value 都要做解码操作 if (decodeURIComponent(cookie[0]) === key) { return decodeURIComponent(cookie[1]); } } // 没有查找到指定的 key 对应的 value 值,则返回 null return null; } /* 存入 设置 */ // 设置 options 默认为空对象 options = options || {}; // key = value,对象 key,value 编码 var cookie = encodeURIComponent(key) + "=" + encodeURIComponent(value); // 失效时间 if ((typeof options.expires) !== "undefined") { // 有配置失效时间 if (typeof options.expires === "number") { // 失效时间为数字 var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } cookie += ";expires=" + options.expires.toUTCString(); } // 路径 if (typeof options.path !== "undefined") cookie += ";path=" + options.path; // 域名 if (typeof options.domain !== "undefined") cookie += ";domain=" + options.domain; // 安全连接 if (options.secure) cookie += ";secure"; // 保存 document.cookie = cookie; } // 从所有的 cookie 中删除指定的 cookie function removeCookie(key, options) { options = options || {}; options.expires = -1; // 将失效时间设置为 1 天前 cookie(key, "", options); }