cookie与session(略谈)

 

cookie

储存在用户本地终端上的数据

 

 

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265。(可以叫做浏览器缓存)
Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息。
目前有些 Cookie 是临时的,有些则是持续的。临时的 Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除
持续的 Cookie 则保存在用户的 Cookie 文件中,下一次用户返回时,仍然可以对它进行调用。在 Cookie 文件中保存 Cookie,有些用户担心 Cookie 中的用户信息被一些别有用心的人窃取,而造成一定的损害。其实,网站以外的用户无法跨过网站来获得 Cookie 信息。如果因为这种担心而屏蔽 Cookie,肯定会因此拒绝访问许多站点页面。因为,当今有许多 Web 站点开发人员使用 Cookie 技术,例如 Session 对象的使用就离不开 Cookie 的支持[。
 
以下是一条cookie信息

 

 "_octo=GH1.1.969433396.1497770397; _ga=GA1.2.1764394916.1497770397; _gat=1; tz=Asia%2FShanghai" 

cookie存在于浏览器当中的

服务器返回的响应头里面的信息:cookie的格式,键值对

 Set-Cookie:PHPSESSID=ot684bvd4n6mlpmsg2pbsubb14; expires=Mon, 19-Jun-2017 07:24:17 GMT; path=/ 

 

cookie 是存在于客户端浏览器的,是可以设置的,也可以获取的 document.cookie = ""; document.cookie 

同域名下面的cookie是共享的  studyit.com/login  studyit.com/index

根目录下面的cookie信息,是可以被所有的子目录访问的,但是子目录的cookie信息,是不能被父级访问到的

类似 于作用域

不同域名之间的cookie信息不能互相访问,不共享

cookie是可以设置过期时间的,默认的生命周期就是页面关闭的时候 

<script>
    document.cookie="name=zhangsan;age=20;";//虽然用分号隔开了,但是内容不能全部获取到
    document.cookie="name=zhangsan;";
    document.cookie="age=20;";
//这样写是不会将前面的给覆盖掉,但是大小是有限制的,大约在4k
    //因为浏览器每次发送请求的时候都会默认携带cookie,如果cookie的数据太大了会影响传输速度和访问效率
    console.log(document.cookie);
    // 因为cookie就是一个字符串,设置的时候,没有问题,但是获取里面的某相cookie值的时候,非常的不方便,因此可以使用 jquery.cookie这个插件来完成

</script>

  

  • Session

 

Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。

 

具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。

 

需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

Session是存在服务器端的,相当于有一个session存区,每当浏览器发送请求的时候,如果不是第一次请求的话,都会携带之前的cookie信息到服务器端,这个时候,就可以和session存储区的sessionid进行匹配,如果匹配成功,则证明是已经登录的用户,如果没有,则证明没有登录过,或是没有访问

Session也是有过期时间的,默认是20分钟。这个20分钟是一个滑动时间

 

session的工作原理

 

(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

 

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。

 

(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。

 

(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

 

  • 利用cookie实现登陆

因为只能请求过服务器之后,才会由服务器给浏览器发送一条session字符串,存储到浏览器的cookie当中

第二次请求的时候,浏览器就会携带着存储到cookie中的信息一并发送给服务器

服务器接受请求,并获得cookie中的信息,然后和session存储区的数据进行匹配,如果匹配成功,则证明之前已经登陆过

则可以进行后续的跳转,否则跳转到登陆页面

php方式测试cookie

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<p>使用PHP的方式测试...</p>
</body>
</html>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('get','setCookie.php');
  xhr.send();
</script>

 

setCookie.php:

 

<?php
  header("Content-type:text/html;charset=utf-8");
//  echo  '请求成功了';
        setcookie('gender','mmmm');
        // cookie也是可以在服务器端进行设置的,是可以跟随响应报文,返回到浏览器端,存储在浏览器的cookie当中
        // 当再次再来访问的时候,会获取到带来的cookie信息,和服务器的session存储区内的信息进行匹配,如果匹配成功则可以进行其它的访问操作
//        var_dump($_COOKIE);  // $_COOKIE可以接收发送过来的所有的cookie信息
   echo json_encode($_COOKIE); // json_encode 是将 $_COOKIE中的内容转换成对象形式的字符串

?>

 

session与cookie 小结:

  • Cookie:
  1. cookie是存在于浏览器端的
  2. 每次浏览器发送请求都会携带cookie信息,如果是第一次请求一般是没有cookie
  3. cookie是可以同域名下面的页面共享的,不同域名下面的cookie不共享
  4. 父级目录下面的cookie,子级目录是可以获取到的,但是子级下面的cookie,父级获取不到
  5. cookie是有过期时间的,一般默认时间是页面关闭,时间是可以自己设置的
  6. cookie的格式是一个字符串,是一个键值对形式
  7. cookie是有大小限制的,一般是4k,如果数据太大的话,会影响传递速度或是效率
  8. Document.cockie可以用来设置或是获取cookie信息
  • Session:
  1. session存储于服务器端,依赖于cookie
  2. 服务器端相当于有一个session存储区
  3. session没有大小限制

使用jQuery.cookie.js这个插件来设置cookie

首先这个插件是依赖于jQuery的,因此使用的时候一定要先引入jQuery文件,然后再使用插件

$.cookie("name","zhangsan");

$.cookie(),这个方法获取的是一个对象,因此存取cookie就变的非常方便

  <title>Title</title>
  <script src="views/public/assets/jquery/jquery.js"></script>
  <script src="views/public/assets/jquery-cookie/jquery.cookie.js"></script>
  <script>
//    $.cookie('name','lisi');
//    console.log($.cookie());
//    console.log($.cookie('sex')); //使用这种方式来获取cookie的值就方便多了
    
    $.cookie('name','zhangsan',{path:'/',expires:new Date('2017-06-20 18:00:00')});
  </script>
</head>
<body>
<p>这是使用jquery.cookie.js在设置cookie了...</p>
</body>

 

posted @ 2017-06-18 20:55  陈笑笑  阅读(235)  评论(0编辑  收藏  举报