一、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);
}

COOKIE和SESSION之间的区别以及用法的更多相关文章

  1. sessionStorage 、localStorage 、 cookie 和session之间的区别

    四者的异同 特性 Session   Cookie localStorage sessionStorage 数据的生命期   在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能,考虑到减 ...

  2. php 会话控制(了解cookie与session之间的区别与联系)

    相同点: 都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系. 不同点: 简单的说cookie的信息保存在客户端,session的信 ...

  3. 3、Cookie与Session之间有哪些区别或者是优缺点?

    Cookie与Session之间有哪些区别或者是优缺点? 知道了Cookie与Session,我们来做一些简单的总结:   1.Cookie可以存储在浏览器或者本地,session只能存在服务器    ...

  4. Cookie和Session简介与区别

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

  5. 牛客网Java刷题知识点之什么是cookie、什么是session、cookie和session有什么区别

    不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?tpId=31&tqId=21170&query=&asc= ...

  6. Cookie 和 Session 有什么区别呢?

    Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等 但如果再往深入探讨的话,就慢慢有一些朋友不太了解了 ...

  7. GROUP BY,WHERE,HAVING之间的区别和用法

      GROUP BY,WHERE,HAVING之间的区别和用法 分类: Oracle学习2009-11-01 23:40 21963人阅读 评论(6) 收藏 举报 mathmanagersql数据库m ...

  8. 浅谈C++中指针和引用的区别者之间的区别和用法(转)

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...

  9. (进阶篇)浅谈COOKIE和SESSION关系和区别

    COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...

随机推荐

  1. idea安装proto插件后不能识别.proto文件解决方案

     just had a try and it worked well. Could you please check "File Types" in IDEA? Open &quo ...

  2. 固定div的位置——不随窗口大小改变为改变位置

    百度首页示例: 我给二维码,和下面文本固定位置 这时html代码 <div id="bar_code"> <div class="img_put&quo ...

  3. ASP.NET 性能监控工具和优化技巧

    转载自:http://blog.haoitsoft.com/index.php/archives/657 ASP.NET 性能监控工具和优化技巧 发表回复 为了阐明准确甄别性能问题的重要性,下面列举了 ...

  4. Problem 3: Largest prime factor

    The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...

  5. Restful设计思想

    1.REST的架构设计 代表性状态传输(Representational State Transfer,REST)在Web领域已经得到了广泛的接受,是基于SOAP和Web服务描述语言(Web Serv ...

  6. centos安装MySQL5.7

    Mysql安装 一.查看是否安装MySQL # rpm -qa | grep mysql 二.查看所有mariadb的软件包 # rpm -qa | grep mariadb 三.删除相关的maria ...

  7. .NET复习笔记-泛型

    1.yield关键字用于返回迭代器具体的值,如下框代码所示 /// 返回0~9整数集合 public static IEnumerable<int> yieldSampleMethod() ...

  8. redis初始化服务器

    从启动 Redis 服务器, 到服务器可以接受外来客户端的网络连接这段时间, Redis 需要执行一系列初始化操作. 整个初始化过程可以分为以下六个步骤: 初始化服务器全局状态. 载入配置文件. 创建 ...

  9. python爬虫初级--获取指定页面上的菜单名称以及链接,然后导出

    ''' Created on 2017年4月5日 @author: Admin ''' import requests from bs4 import BeautifulSoup as bsp # 网 ...

  10. Spring 注入集合

    Spring 中,注入集合类型的数值方式 <bean id="javaCollection" class="com.qie_zi.JavaCollection&qu ...