cookie与session(略谈)

 

cookie

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

 

 

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" html

cookie存在于浏览器当中的jquery

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

 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

相似 于做用域session

不一样域名之间的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>
相关文章
相关标签/搜索