cookie和session的定义
cookie:
当你第一次访问某个网站的时候 web服务器会想你发送一小堆数据(cookie) 当你第二次访问这个网站的时候 web服务器就会通过cookie来查看你的身份 并把特定的内容发给你 这样就提供个人化的服务网站。
cookie机制:正统的cookie分发是通过http协议实现的 服务器通过在http的响应头上加上一行特殊的指示以提示浏览器按照相应的cookie 。同时js等也可以生成cookie。而cookie的使用时浏览器按照一定的原则自动发送给后台服务器的。
如果某个cookie所声明的作用范围大于等于请求的资源所在的位置 则把该cookie附在这次http请求头上并发送给服务器。
cookie的内容主要包括:key value 过期时间 路径和域 其中路径和域就构成了cookie的作用范围
若不设置过期时间 cookie的默认过期时间是会话关闭 这类cookie就称为会话cookie 存储在内存中
设置了过期时间 存储在硬盘上
session:
服务器端通常利用散列表来保存session的信息 key就是sessionid value就是session的值
服务器先检查这个客户端的请求里边是否已经包含了sessionid 如果已经包含了测出来的sessionid 服务器就按照把session检索出来使用 如果没有包含sessionid 则为客户端创建一个sessionid 并且在服务器的散列表中生成一个与sessionid对应的session值
sessionid的值就是通过cookie来保存的。但是cookie是可以被人为的禁止 所以必须有其他的机制可以允许服务器想浏览器传回sessionid。
1、表单隐藏字段 在表单中添加一个隐藏的input 服务器会自动修改客户端表单的值,以便在表单提交时就可以把sessionid传回服务器
<form>
<input type=hidden name=sessionid value=sessionid的值>
<input type=text >
</form>
2、将服务器端返回来的sessionid写在url
cookie和session的区别
1、cookie数据是存放在客户端上边的 session是存放在服务器数据上边的
2、cookie是不安全的 被人可以通过获得你本地的cookie 进而使用的这个cookie假装你进行网站的访问
3、单个cookie保存的数据不会超过4k 很多浏览器限制一个站点最多保存20个cookie
4、所以个人重要的信息(登陆信息)要存放在session中 其他信息可以存放在cookie中
js对cookie操作的封装
var CookieUtil = {
// 设置cookie
set : function (name, value, expires, domain, path, secure) {
var cookieText = "";
cookieText += encodeURIComponent(name) + "=" + encodeURIComponent(value);
if (expires instanceof Date) {
cookieText += "; expires=" + expires.toGMTString();
}
if (path) {
cookieText += "; path=" + path;
}
if (domain) {
cookieText += "; domain=" + domain;
}
if (secure) {
cookieText += "; secure";
}
document.cookie = cookieText;
},
// name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure
// 获取cookie
get : function (name) {
var cookieName = encodeURIComponent(name) + "=",
cookieStart = document.cookie.indexOf(cookieName),
cookieValue = "";
if (cookieStart > -1) {
var cookieEnd = document.cookie.indexOf (";", cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
}
return cookieValue;
},
// 删除cookie
unset : function (name, domain, path, secure) {
this.set(name, "", Date(0), domain, path, secure);
}
};
// 测试
CookieUtil.set("name", "zhang");
var name = CookieUtil.get("name");
alert(name); // zhang
CookieUtil.unset("name");
alert(CookieUtil.get("name")); // 空