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"));  // 空

丹丹赵
298 声望20 粉丝

« 上一篇
玩转git和github
下一篇 »
es6-promise