COOKIE和SESSION之间的区别以及用法
一、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之间的区别以及用法的更多相关文章
- sessionStorage 、localStorage 、 cookie 和session之间的区别
四者的异同 特性 Session Cookie localStorage sessionStorage 数据的生命期 在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能,考虑到减 ...
- php 会话控制(了解cookie与session之间的区别与联系)
相同点: 都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系. 不同点: 简单的说cookie的信息保存在客户端,session的信 ...
- 3、Cookie与Session之间有哪些区别或者是优缺点?
Cookie与Session之间有哪些区别或者是优缺点? 知道了Cookie与Session,我们来做一些简单的总结: 1.Cookie可以存储在浏览器或者本地,session只能存在服务器 ...
- Cookie和Session简介与区别
1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...
- 牛客网Java刷题知识点之什么是cookie、什么是session、cookie和session有什么区别
不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?tpId=31&tqId=21170&query=&asc= ...
- Cookie 和 Session 有什么区别呢?
Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等 但如果再往深入探讨的话,就慢慢有一些朋友不太了解了 ...
- GROUP BY,WHERE,HAVING之间的区别和用法
GROUP BY,WHERE,HAVING之间的区别和用法 分类: Oracle学习2009-11-01 23:40 21963人阅读 评论(6) 收藏 举报 mathmanagersql数据库m ...
- 浅谈C++中指针和引用的区别者之间的区别和用法(转)
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
随机推荐
- Oracle 11g OGG 修改 trail 文件大小
OGG 修改 trail 文件大小 2018-06-11 15:14 380 0 原创 GoldenGate 本文链接:https://www.cndba.cn/leo1990/article/285 ...
- Spring _day02_IoC注解开发入门
1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...
- ES6中var/let/const的区别
let的含义及let与var的区别: let 声明的变量只在它所在的代码块有效: 如下: for (let i = 0; i < 10; i++) { console.log(i); } con ...
- Touch事件分发源码解析
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以下源码基于Gingerbread 2.3.7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.先看ViewGroup的di ...
- maven jstl The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
maven jstl 报错 HTTP Status 500 – Internal Server Error Type Exception Report Message The absolute uri ...
- Quartz定时任务封装
一般的系统都会有一些定时任务,那么我们将这个定时任务封装起来,只要系统需要添加定时任务时,只需调用此方法传入所需要的值即可完成定时任务. 自己自学整理的一些随笔 1.首先对周期粒度进行封装 publ ...
- 模块化 Sea.js(CMD)规范 RequireJS(AMD)规范 的用法
插入第三方库AMD CMD都 一样 如:JQ(再JQ源码里修改) 使用seajs的步骤 1.HTML里引入seajs <script src="./lib/sea.js"& ...
- ASP中替换掉换行符<br>
function HtmlStrReplace(Str) if Str="" or isnull(Str) then HtmlStrReplace="" ...
- Python 天气查询到实现语音播放
import requests #引用requests模块import pygame # 获取天气def inquery(self): url = "https://free-api.hew ...
- Leetcode 600 不含连续1的非负整数
给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数. 例如: 输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数<= 5: 0 : 0 1 ...