Cookie&Session回头看

作者: baiying | 来源:发表于2017-08-17 17:51 被阅读176次

cookie和session是前端学习中出现频率非常高的问题,之前也有接触,今天就来整理一下

cookie

工作原理

由于http是无状态的协议,服务器单从网络连接上无法知道客户身份,那怎么办呢,给每个客户发一个通行证吧,访问服务器时带着自己的通行证,就可以确认身份啦

cookie实际上就是一段文本信息,可以理解为http的扩展,是一种客户端存储的方式,cookie是如何在服务器和浏览器之间工作的呢

1.客户端向服务器发送请求
2.服务器发送一个http响应到客户端,其中包含set-cookie头部
3.客户端发送一个http请求到服务器,其中包含cookie头部
4.服务器发送一个http响应给客户端

cookie
服务器端设置cookie
var http = require('http');
var fs = require('fs');

http.createServer(function(req, res) {
    res.setHeader('status', '200 OK');
    res.setHeader('Set-Cookie', 'isVisit=true;domain=.yourdomain.com;path=/;max-age=1000');
    res.write('Hello World');
    res.end();
}).listen(8888);

console.log('running localhost:8888')
客户端浏览器设置cookie

直接用js设置cookie
document.cookie = "name=Jonh; ";

cookie属性
  • String name:该Cookie的名称。
  • Object value:该Cookie的值。
  • int maxAge:该Cookie失效的时间,单位秒.如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1。
  • boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。
  • String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。
  • String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。
  • String comment:该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明。
    int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范。
对cookie的常见操作

cookie中没有直接删除和修改的方法,可通过下边的方式进行操作

  • 删除:将maxAge设置为0
  • 修改:重新设置一个同名的cookie
cookie跨域

Cookie是不可跨域名的。域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。
  正常情况下,同一个一级域名下的两个二级域名www.helloweenvsfei.comimages.helloweenvsfei.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有helloweenvsfei.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数,例如:

Cookie cookie = new Cookie("time","20080808"); // 新建Cookie
cookie.setDomain(".helloweenvsfei.com"); // 设置域名
cookie.setPath("/"); // 设置路径
cookie.setMaxAge(Integer.MAX_VALUE); // 设置有效期
response.addCookie(cookie); // 输出到客户端

Session

Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力
为了有更高的速度,服务器一般把session放在内存中,每个用户都有一个独立的session
虽然session是保存在服务器的,看似和客户端无关更和cookie无关,但实际上,session的工作是依赖cookie的,这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。该cookie的maxAge一般为负数,浏览器关闭即失效

session的工作步骤

1.服务器端的产生Session ID
2.服务器端和客户端存储Session ID
3.从HTTP Header中提取Session ID
4.根据Session ID从服务器端的Hash中获取请求者身份信息

当浏览器禁用cookie时,session要如何正常工作呢,那就是url地址重写

url地址重写

URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态,HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写

cookie和session区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上;
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  • 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

相关文章

  • Cookie&Session回头看

    cookie和session是前端学习中出现频率非常高的问题,之前也有接触,今天就来整理一下 cookie 工作原...

  • cookie&session

    cookie Cookie 数据是由客户端来保存和携带的,所以称之为客户端技术 属性 name 名称不能唯一确定一...

  • cookie&session

    响应首行setstatus(int)sendError(int,String)响应头setHeaderaddHea...

  • Cookie&session

    1.会话技术: 从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话。 2....

  • JavaWeb - Cookie&Session

    jsp+ajax = 使html页面中的元素可以单独接受响应、发送请求。 数据在前端、Servlet、数据库之间传...

  • Cookie&Session随记

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,...

  • Django - Cookie&Session

    获取cookie: 设置cookie: 这中设置cookie,关闭浏览器就失效了。 实例: 或者: session...

  • JAVAEE——Cookie&Session会话

    会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端...

  • HTTP之Cookie&Session

    Cookie - 什么是cookie? MDN是这样说的:HTTP Cookie(也叫Web cookie或者浏览...

  • Servlet细节&Cookie&Session

    Servlet细节&Cookie&Session Servlet的细节问题 一个Servlet可以有多个映射 Se...

网友评论

    本文标题:Cookie&Session回头看

    本文链接:https://www.haomeiwen.com/subject/bgknrxtx.html