资讯专栏INFORMATION COLUMN

http cookie解释

livem / 397人阅读

摘要:可选项部分只会在浏览器端使用,而不会被发送至服务器端。包括过期时间选项,过期时间选项过期时间,指定了何时不会再被发送至服务器,随后浏览器将删除该。

浏览器和Webserver之间的关系,被设计为无状态的,这是一个很重要的设计,可以让客户端无需和服务器保持状态,节省宝贵的端口资源,从而可以为更多的客户链接服务。

但是这样带来了问题,简言之,服务器无法知道两个请求是否来自于同一个浏览器。然而,在页面访问计数,购物车等应用中,服务器是需要区分不同的浏览器的,比如客户浏览器1放置到购物车内的商品,和客户2浏览器的不可以混杂在一起。

办法是有的。比如在请求的页面中插入一个 token,然后在下次请求时将这个 token 返回至服务器。可以把token放到form内或者URL参数内。

但是被广为接受的是Cookie方法。cookie就是根据服务器响应头的指示,浏览器保存的一段文本。并在随后的请求中将这些信息发送至Web服务器,Web服务器就可以使用这些信息来识别不同的用户。

具体做法就是:

服务器可以为来访的浏览器设置一个值,这个通过response内的Set-Cookie来实现

浏览器记住这个值,并且每次访问服务器时,发送此值过来。可以从request内的Cookie值承载

演示

如下代码使用express.js,演示了一个访问计数的服务:

const express = require("express")
const app = express()
app.get("/", (req, res) => {
    var count = req.header("Cookie")
    if (!count){
        count = 0 
    }
    count = parseInt(count) + 1
    res.setHeader("Set-Cookie",count)
    res.send("Your Visit page count:" + count)
})
app.get("/reset", (req, res) => {
    res.setHeader("Set-Cookie",0)
    res.send("Your Visit page count:" + 0)
})
app.listen(3000, () => console.log("Example app listening on port 3000!"))

可以打开浏览器,比如chrome,访问localhost:3000,每次刷新,可以看到:

Your Visit page count:0

的数字加1。

可以再打开另外一个和chrome不同的浏览器,比如safari,访问localhost:3000,每次刷新,可以看到:

 Your Visit page count:0

的数字加1。这两个加1的动作,两个浏览器各自加各自的,互相并不影响。

创建 cookie

通过发送一个称为Set-Cookie的HTTP 消息头来创建一个 cookie,格式如下:

Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

消息头的第一部分,value 部分,可以是任意字符串。但是通常是一个name=value格式的字符串。

可选项部分只会在浏览器端使用,而不会被发送至服务器端。包括过期时间选项,

过期时间选项

过期时间(expires),指定了 cookie 何时不会再被发送至服务器,随后浏览器将删除该 cookie。该选项的值是一个 Wdy, DD-Mon-YYYY HH:MM:SS GMT 日期格式的值

expires=Sat, 02 May 2009 23:38:25 GMT

如果 expires 设置了一个过去的时间点,那么这个 cookie 会被立即删掉。没有设置 expires 选项时,cookie 的生命周期仅限于当前会话中,关闭浏览器意味着这次会话的结束,

domain 选项

指定了 cookie 将要被发送至哪个或哪些域中。默认情况下,domain 会被设置为创建该 cookie 的页面所在的域名,所以当给相同域名发送请求时该 cookie 会被发送至服务器。例如,本博中 cookie 的默认值将是 bubkoo.com。domain 选项可用来扩充 cookie 可发送域的数量,Yahoo! 这种大型网站,都会有许多 *.yahoo.com 形式的站点(例如:my.yahoo.com, finance.yahoo.com 等等)。将一个 cookie 的 domain 选项设置为 yahoo.com,就可以将该 cookie 的值发送至所有这些站点。

path 选项

另一个控制 Cookie 消息头发送时机的选项是 path 选项,和 domain 选项类似,path 选项指定了请求的资源 URL 中必须存在指定的路径时,才会发送Cookie 消息头。这个比较通常是将 path 选项的值与请求的 URL 从头开始逐字符比较完成的。如果字符匹配,则发送 Cookie 消息头:

path=/blog

在这个例子中,path 选项值会与 /blog,/blogrool 等等相匹配;任何以 /blog 开头的选项都是合法的。

secure 选项

只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。例如:

Set-Cookie: value; secure





文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93804.html

相关文章

  • 前端分享之cookie的使用及单点登录

    摘要:两个域之间是不是存在跨域问题,主要是根据协议域名端口号这三个点进行判断,只要有一个不一样就是跨域。例如协议不同与域名不同与端口号不同与浏览器默认情况下无法主动跨域向后端发送,需要在前端请求时加入配置项。据此,可以实现单点登录。 cookie是什么 cookie的英文意思是饼干。在计算机术语中指服务端存放在客户端的一段数据。这段数据在客户端每次进行http请求时会自动加在http请求报文...

    Backache 评论0 收藏0
  • 前端分享之cookie的使用及单点登录

    摘要:两个域之间是不是存在跨域问题,主要是根据协议域名端口号这三个点进行判断,只要有一个不一样就是跨域。例如协议不同与域名不同与端口号不同与浏览器默认情况下无法主动跨域向后端发送,需要在前端请求时加入配置项。据此,可以实现单点登录。 cookie是什么 cookie的英文意思是饼干。在计算机术语中指服务端存放在客户端的一段数据。这段数据在客户端每次进行http请求时会自动加在http请求报文...

    MudOnTire 评论0 收藏0
  • Cookie 与 Session 详(hu)解(che)【拿去面试用】

    摘要:于是和就出现了,用于在端和端来分别维护我是谁的状态。这种做法就是协议本身支持状态。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。所以两者的作用域不一样。因此才会出现这种情况。 1、Cookie Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据 该数据以一个称为Set-Cookie的 HTTP 报头格式从 Web 服务器发出。 浏览器以称为...

    zhaofeihao 评论0 收藏0
  • Laravel核心解读 -- Request

    摘要:根据提供的超级全局数组来创建实例上面的代码有一处需要额外解释一下,自开始内建的可以通过命令行解释器来启动,例如但是内建有一个是将和这两个请求首部存储到了和中,为了统一内建服务器和真正的中的请求首部字段所以在这里做了特殊处理。 Request 很多框架都会将来自客户端的请求抽象成类方便应用程序使用,在Laravel中也不例外。IlluminateHttpRequest类在Laravel框...

    K_B_Z 评论0 收藏0
  • 再也不学AJAX了!(三)跨域获取资源 ① - 同源策略

    摘要:浏览器的同源策略浏览器所遵守的同源策略是指限制不同源之间执行特定操作。这正是同源策略想要规避的安全隐患。目前为止,你已经充分了解同源策略这个主题。 我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体。通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅。 但是AJAX技术并不是一把万能钥匙,互联网中的数据隐私和数据安全(例如你的银行账号...

    godlong_X 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<